Jetpackの構成
図からわかるように、Jetpackの構成は、アーキテクチャ、基盤、動作、UIの4つの部分に分かれています。
アーキテクチャには主に次のものが含まれます。
- 日付のバインド
- ライフサイクル
- LiveData
- ナビゲーション
- ページング
- ルーム
- ViewModel
- WorkManager
データバインディング
DataBindingは、ビュー呼び出しの一貫性の問題を解決します。
レイアウト内の監視可能データをバインドすることにより、バインドされた監視対象データコンテンツが設定された後、データコンテンツを更新するようにコントロールに通知されます。
ライフサイクルとは何ですか?
ライフサイクルは、主にライフサイクル管理の一貫性の問題を解決します。以前は、ライフサイクル管理はすべて手動メンテナンスに依存していました。たとえば、GpsManagerは、使用される各アクティビティページをアクティブ化、バインド解除、および停止する必要があり、アクティビティページが増えると問題が発生しやすくなりました。
ライフサイクルは、ライフサイクル管理のすべての複雑な操作をLifeCycleOwnerの基本クラス(ビューコントローラーアクティビティの基本クラスなど)にテンプレートメソッドとオブザーバーモードでカプセル化し、開発者が手動で作成する手間を省きます。開発者は、サブクラスでgetLifecycle()。addObserver(GpsManager.getInstance())を直接呼び出して、LIfeCycleOwnerのライフサイクル認識を実現できます。
LiveDataとは何ですか?
LiveDataは、唯一の信頼できるソースの配布ステータスの標準化された開発コンセプトに従っているため、迅速な開発プロセスでの追跡とトラブルシューティングが困難であり、予測できない問題の可能性が最小限に抑えられます。
信頼の唯一のソースは、ライフサイクルがViewControllerから独立しているデータコンポーネントです。通常はシングルトンまたはViewModelです。ViewModelは、ファクトリパターンによって実装された疑似シングルトンであるシングルトンと見なすこともできます。
ナビゲーションとは何ですか?
ナビゲーションは、Androidナビゲーションを簡素化するためのライブラリおよびプラグインです。ナビゲーションを使用してフラグメントの切り替えを管理でき、アプリのインタラクティブなプロセスを視覚的に確認できます。
ナビゲーションの利点
- 公式規格はフラグメントの切り替えを処理します
- デフォルトでフラグメントの前方と後方を正しく処理する
- トランジションとアニメーションの標準化されたリソースを提供する
- 深いリンクを実現し、処理することができます
- ツールバー、BottomNavigationView、ActionBarをバインドできます
- SafeArgs(Gradleプラグイン)は、データを渡すときにタイプの安全性を提供します
- ViewModelのサポート
ページング
開発者が小さなデータを一度にロードして表示できるようにします。一部のデータをオンデマンドでロードすると、ネットワーク帯域幅とシステムリソースの使用量を減らすことができます。
ルーム
ルームパーシステンスライブラリは、SQLiteに抽象化レイヤーを提供し、開発者がSQLiteデータベースにさらに使いやすくスムーズにアクセスできるようにします。
ViewModel
ViewModelの存在は、主に状態管理とページ通信の問題を解決することです。ビューコントローラが再構築されると、軽量状態は、ビューコントローラの基本クラスのonSaveInstanceStateを介したシリアル化によって保存および復元できます。ただし、ネットワークリクエストによって返されるデータ収集などの重い状態の場合は、View Controllerよりも長いライフサイクルでViewModelに格納できるため、ViewModelから直接復元できます。これは非効率的で非効率的なシリアル化方法です。
WorkManager
アプリケーションが終了したり、デバイスが再起動したりした場合でも、実行が予想される延期可能な非同期タスクを簡単にスケジュールできます。
財団には主に次のものが含まれます。
- AppCompat
- Android KTX
- マルチデックス
- テスト
AppCompat
AppCompatで始まる一連のAPIは、Android開発の下位バージョンと互換性があるように提供されています。
Android KTX
Android KTXは、Android上のKotlinコードをより簡潔にするために設計された、Googleのオープンソース拡張機能であり、開発効率とユーザーエクスペリエンスを向上させます。
使用事例:
1.文字列をURIに変換します
// Kotlin
val uri = Uri.parse(uriString)
// android KTX
val uri = uriString.toUri()
2、SharedPreferences
// kotlin
sharedPreferences.edit()
.putBoolean("key", value)
.apply()
// KTX
sharedPreferences.edit {
putBoolean("key", value)
}
3.ビューのpreDrawモニタリング
// kotlin
view.viewTreeObserver.addOnPreDrawListener(
object : ViewTreeObserver.OnPreDrawListener {
override fun onPreDraw(): Boolean {
viewTreeObserver.removeOnPreDrawListener(this)
actionToBeTriggered()
return true
}
})
// KTX
view.doOnPreDraw {
actionToBeTriggered()
}
Multidex(Android 5.0でリリース)
使用理由:AndroidのDexファイルには、最大65536個のメソッドを格納できます。これは短いタイプの範囲です。ただし、アプリケーションメソッドの数が増え続けると、Dexファイルが65536メソッドの数を超えると、パッケージ化時に例外がスローされるため、Multidexが導入されます。
- パッケージ化するときは、アプリケーションを複数のdexに分割します(例:classes.dex、classes2.dex、classes3.dex ...)。ロードするときは、これらのdexをDexPathListの対応する配列に追加します。これにより、メソッドの数の制限が解決されます。
- Andorid 5.0以降、ART仮想マシンは当然MultiDexをサポートします。
- Andorid 5.0より前は、システムは1つのメインdexのみをロードし、もう1つのdexはMultiDexを使用してロードします。
指示:
1.minSdkVersionが21以上
android {
defaultConfig {
...
minSdkVersion 21
targetSdkVersion 26
multiDexEnabled true
}
...
}
2.minSdkVersionが20以下
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 26
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.3'
}
関連するアプリケーションコードを定義する(2つの方法)
// 继承 MultiDexApplication
public class MyApplication extends MultiDexApplication { ... }
// 或者 在Application中添加 MultiDex.install(this);
public class MyApplication extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
テスト
ユニットおよびランタイムインターフェイステスト用のAndroidテストフレームワーク。
動作には主に次のものが含まれます。
- ダウンロードマネジャー
- メディアと再生
- 権限
- 通知
- 共有
- スライス
ダウンロードマネジャー
長時間実行されるHTTPダウンロードを処理し、障害または接続の変更とシステムの再起動後にダウンロードを再試行できます。
メディアと再生
メディアの再生とルーティングのための下位互換API(Google Castを含む)。
権限
アプリケーションのアクセス許可を確認および要求するための互換性API。
通知
下位互換性のある通知APIを提供し、WearとAutoをサポートします。
共有
アプリケーション操作バーに適した共有操作を提供します。
スライス
アプリケーションの外部にアプリケーションデータを表示できる柔軟なインターフェイス要素を作成します。
スライスはGoogleアシスタントの拡張機能です。Googleは、ユーザーがアプリの特定の機能にすばやくアクセスできることを望んでいます。たとえば、Googleアシスタントに家に帰りたいと言った場合、以前はDidiとUberのオプションしかなかった可能性があります。 、ただし、スライスの導入後、自宅までの距離、金額、Didiアイテムのすぐ下にタクシーを利用するかどうかなど、より詳細なデータリストが表示されます。
UIには主に次のものが含まれます。
- アニメーションとトランジション
- オート、TV&ウェア
- 絵文字
- 断片
- レイアウト
- パレット
パレット
パレットはパレットツールに似ています。入力ビットビットに応じてメインカラーが抽出され、画像と色がより一致し、インターフェイスがより調整されます。
パレットが抽出できる色は次のとおりです。
- 活気に満ちた
- 鮮やかな闇(鮮やかな闇)
- 鮮やかな光(鮮やかな光)
- ミュート(ソフト)
- 落ち着いたダーク(ソフトダークカラー)
- 落ち着いた光(柔らかく明るい色)
Paletteオブジェクトを作成するには、4つのメソッドがあります。Bitmapオブジェクトを渡す必要があります。以下の最初の2つは同期メソッドで、後の2つは非同期メソッドです。
- generate(ビットマップビットマップ)
- generate(ビットマップビットマップ、int numColors)
- generateAsync(ビットマップビットマップ、PaletteAsyncListenerリスナー)
- generateAsync(ビットマップビットマップ、int numColors、最終PaletteAsyncListenerリスナー)
Paletteオブジェクトを取得すると、6色に対応するSwatchオブジェクトを取得できます。
- Palette.getVibrantSwatch()
- Palette.getDarkVibrantSwatch()
- Palette.getLightVibrantSwatch()
- Palette.getMutedSwatch()
- Palette.getDarkMutedSwatch()
- Palette.getLightMutedSwatch()
SwatchオブジェクトはPaletteの内部クラスであり、色の値を取得するための次のメソッドに対応しています。
- getPopulation():サンプルのピクセル数
- getRgb():色のRBG値
- getHsl():色のHSL値
- getBodyTextColor():本文テキストの色の値
- getTitleTextColor():タイトルテキストの色の値