setBackgroundResource(0) で View の背景色を削除できます
Resources.getSystem().getDisplayMetrics().density Context を使用せずに画面密度を取得することもできます
シンプルなマスク効果は ViewGroup のdispatchDraw をオーバーロードすることで実現できます。 たとえば、プルダウンして更新するときに、contentView にマスクのレイヤーを追加できます。 Canvas.drawRect(0, mContentView.getTranslationY(), getWidth(), getHeight(), mMaskPaint);
新しいビューは View.generateViewId() (API 17 以降で利用可能) を使用して ID を生成できます。これはシステムが保証しますuniqueness
GridView を使用する場合、android:padding と android:clipToPadding="false" を一緒に使用すると効果が高くなります。
レイアウトファイル内で、プレースホルダーのみの場合は、スペースを使用してビューを置き換えることができます。 最良の点は、Space が描画プロセスをスキップできることです。
TypedValue.applyDimension(int Unit, float value, DisplayMetrics metrics) は、dp、px、sp 間の変換を容易にします。
Activity.startActivities() このメソッドの最も直接的な理解は、インテントを使用して複数のアクティビティを開くことです。
TextUtils.isEmpty() 受信した文字列が NULL または長さが 0 の場合、true を返します。
Html.fromHtml() Html に精通している場合は、このメソッドを通じていくつかのリッチ テキスト操作をすばやく処理できます。たとえば、ハイパーリンク、グラフィックおよびテキストのレイアウトの処理です。
TextView.setError() テキスト ボックスのエラー リマインダーを設定します
Build.VERSION_CODES 場合によっては、アプリは異なる SDK バージョンに応じて異なる操作を実行する必要があります
PhoneNumberUtils.convertKeypadLettersToDigits このメソッドはシンプルで粗雑で、キーボードに従って文字を入力しますマッピングは数値に変換されます。
ArgbEvaluator ArgbEvaluator.evaluate(floatfraction, Object startValue, Object endValue); 開始カラー値、終了カラー値、オフセットに基づいて新しいカラーを生成し、WeChat の下部バーと同様のスライド カラー グラデーションを数分で実現します。
ValueAnimator.reverse() アニメーション効果をスムーズにキャンセルします
DateUtils.formatDateTime()) このメソッドは、対応する書式設定された時刻または日付を出力できます
Pair このクラスは、データの「セット」を保存するために使用できます。しかし、それはキーと値の関係ではありません。
SparseArray 現在、メモリを節約してパフォーマンスを向上させるために、パフォーマンス最適化の観点から hashMap の代わりに SparseArray を使用しているところが多くあります。
Linkify.addLinks() このクラスを使用すると、テキストにハイパーリンクを簡単に追加できます。
android.media.ThumbnailUtils このクラスは主に、次のようなサムネイル関連の作業を処理するために使用されます。
Bitmap.extractAlpha () は、新しいビットマップを返し、アルファをキャプチャします。元の画像の値。要素の背景画像を動的に変更する必要があり、複数の画像を使用したくない場合があります。この方法を Canvas および Paint と組み合わせることで、単色のビットマップの色を動的に変更できます。
モジュール間で送信する必要があるメッセージがある場合は、Listener の代わりに LocalBroadcastManager を使用してモジュールを分離します。分離に加えて、メッセージの送信と実行が 1 つのスレッド サイクルで分離されるため、メソッド呼び出しチェーンが長すぎる場合に StackOverflow の問題が発生する可能性があります。
静的変数は、アクティビティ、サービスなどを直接的または間接的に参照してはなりません。これにより、アクティビティとそれが参照するすべてのオブジェクトが解放できなくなり、ユーザーが長時間操作すると、メモリが急増します。
ハンドラーメカニズムの特徴の 1 つは、アクティビティとサービスのライフサイクルが終了しても終了しないことです。つまり、Delay Runnable をポストし、Runnable が実行される前にアクティビティを終了した場合でも、時間が経過した後も Runnable は実行されます。 Runnable に View を更新する操作が含まれている場合、プログラムはクラッシュします。
多くの人は、子スレッドでビューを更新するときに Context.runOnUiThread を使用することを好みます。この方法には欠点があります。つまり、アクティビティが破棄された場合など、コンテキストのライフサイクルが終了するとすぐにクラッシュします。と呼ばれた。
SharedPreferences.Editor.commit このメソッドは同期であり、データがフラッシュに同期されるまで戻りません。IO 操作は制御できないため、代わりに apply メソッドを使用してください。 apply は API レベル 9 以上でのみサポートされており、互換性がある必要があります。ただし、最新のサポート v4 パッケージではすでにこの問題が解決されており、SharedPreferencesCompat.EditorCompat.getInstance().apply(editor) を使用するだけです。
PackageManager.getInstalledPackages このメソッドはよく使われますが、モデルによっては大量の結果を取得する場合に呼び出すのに数秒かかる場合があるので、子スレッドで使用してみてください。また、このメソッドを使用してマシンにインストールされているアプリケーションのリストを取得すると、結果が多すぎてシステムで設定されている最大 Binder データ送信の上限を超える場合、TransactionException が発生します。予防策を講じてください。
Context.startActivity を使用して外部アプリケーションを起動する場合は、対応するアプリケーションが見つからないと例外がスローされるため、何らかの例外を防止することをお勧めします。アプリケーション内でアクティビティを開きたい場合は、明示的なインテントを使用すると、システムによるターゲット アクティビティの検索効率が向上します。
アプリケーションのライフサイクルはプロセスのライフサイクルです。アプリケーションは、プロセスが強制終了された場合にのみ破棄されます。アクティビティやサービスが実行されていない場合でも、アプリケーションは存在します。したがって、メモリ負荷を軽減するために、アプリケーション内で大きなオブジェクトやコンテキストなどを参照しないようにしてください。
getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); 効果を発揮するには、setContentView
viewpager の setCurrentItem を呼び出す必要があります。携帯電話は機内モードですか? boolean isEnabled = Settings.System.getInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) == 1;
HashMap をトラバースする最良の方法
public static void printMap(Map mp) { for (Map.Entry m : mp.entrySet()) { System.out.println(m.getKey() + ":" + m.getValue()); } }
Java を使用して生成します間隔内のランダム性 整数
public static int randInt(int min, int max) { Random rand = new Random(); int randomNum = rand.nextInt((max - min) + 1) + min; return randomNum; }
サブクラスが Serializable インターフェイスを実装し、親クラスが実装していない場合、親クラスはシリアル化されませんが、この時点で親クラスにはパラメーターのないコンストラクターが必要です。そうでない場合は、InvalidClassException がスローされます。 。
一時的なキーワードで変数が変更されると、シリアル化が制限される可能性があります。
Jake Wharton の TabPageIndicator を使用する場合、最初に時間のかかる操作を実行してから TabPageIndicator を表示する必要がある場合は、mIndirector.setVisibility(View.GONE) を設定してから mIndirector.setVisibility(View.VISIBLE) を設定する必要があります。 、エラーが報告されます
クラスの継承間の呼び出しシーケンス: 親クラスの静的メンバー -> 子クラスの静的メンバー -> 親クラスの通常のメンバーの初期化と初期化ブロック -> 子クラスの通常のメンバー初期化と初期化ブロック -> サブクラス構築方法
Huawei 携帯電話はログを表示できません。ダイヤル インターフェイス入力 (*#*#2846579#*#*) サービス メニューが表示されます。 「設定」→「ログ設定」 「ログスイッチ」を開いてONに設定します。 「ログレベル設定」を開いて、希望のログレベルを設定します。
再起動などによりバックグラウンドサービスが頻繁に表示されます onStartCommand()インテントによって渡されるパラメーターが null である場合、この問題は、onStartCommand() の戻り値を super.onStartCommand(intent, Service.START_REDELIVER_INTENT, startId); に変更することで解決できます。いくつかのフラグの意味は次のとおりです
アクティビティが完全に表示されていない場合は、PopupWindow と Dialog を表示できません
SharedPreferences を使用して複数のプロセス間でデータを共有することは可能ですが (MODE_MULTI_PROCESS)、非常に不安定です。
その他 Android 開発における非常に便利だが知られていない方法に関する記事については、PHP 中国語 Web サイトに注目してください。