Android Jetpackについて話そう

Androidアーキテクチャのコンポーネントに基づいて、Kotlinコルーチン+レトロフィットが統合され、ネットワークをシミュレートして、あらゆる面で迅速な開発を実現します。

ナビゲーション

NavControllerは、NavHostのアプリケーションナビゲーションのオブジェクトを管理するか、ナビゲーションマップの特定のパスに沿って特定のターゲットに移動するか、または特定のターゲットに直接移動します。

最初に、レイアウト/ activity_main.xmlを定義します

 <fragment
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:layout_constraintBottom_toTopOf="@id/nav_view"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:navGraph="@navigation/mobile_navigation" />

次に、navigation / mobile_navigation.xmlを定義します

アクティビティを追加するには、まず対応するアクティビティをProjectで作成する必要があります。これは、レイアウトデザイナーで処理できます。

<navigation  
<fragment
     android:id="@+id/navigation_home"
     android:name="com.android.myapplication.ui.home.HomeFragment"
     android:label="@string/title_home"
     tools:layout="@layout/fragment_home">

        <action
         android:id="@+id/action_navigation_home_to_detail_activity"
         app:destination="@id/detail_activity" />
 </fragment>
   ...
 <activity
     android:id="@+id/detail_activity"
     android:name="com.android.myapplication.ui.detail.DetailActivity"
     android:label="DetailActivity">
     <argument
         android:name="detailId"
         app:argType="string" />
 </activity>
</navigation>

最後に、ページがジャンプし、パラメータが渡されます

      val direction =  HomeFragmentDirections.actionNavigationHomeToDetailActivity(plantId)
    view.findNavController().navigate(direction)

パラメータ受信:

private val args: DetailActivityArgs by navArgs()

データバインディング

onCreateView()で直接コントロールを使用すると、nullポインタ例外が報告されます。このジェスチャbinding.tvNavigationは可能です。

val binding = FragmentHomeBinding.inflate(inflater, container, false)
binding.tvNavigation.setOnClickListener {
            navigateToDetailPage("1", it)
        }

レイアウトファイルでは、ViewModelでの使用などの文字列連結:

   android:text='@{"Data From Network-> "+viewModel.response}'

ViewModel

インターフェースに関連するデータをライフサイクル方式で保存および管理します。

KotlinコルーチンviewModelScope。ViewModelがクリアされている場合、このスコープで開始されたコルーチンは自動的にキャンセルされます。

private val homeViewModel: HomeViewModel by viewModels {
        InjectorUtils.provideHomeViewModelFactory(requireContext())
    }

viewModelScope.launch {
           ...
        }

LiveData

ライフサイクルを認識できる監視可能なデータストレージクラス。つまり、他のアプリケーションコンポーネント(アクティビティ、フラグメント、サービスなど)のライフサイクルに従います。

 var plantName = gardenPlantings.map {
        ...
    }

マップはLiveData変換を実装します

ルーム

アプリケーションデータのキャッシュを作成するために、SQLiteはSQLiteに基づく抽象化レイヤーを提供し、SQLiteの強力な機能とより堅牢なデータベースアクセスメカニズムを最大限に活用します。

Roomを使用して複雑なデータを参照すると、Roomは基本タイプとラッパータイプの間で変換する機能を提供しますが、エンティティ間のオブジェクト参照は許可しません。

このようなカスタムタイプのサポートを追加するには、カスタムクラスとRoomが保持できる既知のタイプとの間で相互に変換できるTypeConverterを提供する必要があります。

class Converters {//TypeConverters    ...}

@TypeConvertersアノテーションをAppDatabaseクラスに追加して、Roomがエンティティごとに定義したコンバーターとAppDatabaseのDAOを使用できるようにします。

@Database(entities = table, version = 1, exportSchema = false)
@TypeConverters(Converters::class)
abstract class AppDatabase : RoomDatabase() {
   ...
}
@Insert
suspend fun insertPlant(plant: Plant): Long

コルーチンのサスペンドを考える

WorkManager

WorkManager APIを使用すると、アプリケーションが終了したりデバイスが再起動したりした場合でも実行される、遅延可能な非同期タスクを簡単にスケジュールできます。

val workManagerConfiguration = Configuration.Builder()
            .setWorkerFactory(RefreshDataWork.Factory())
            .build()

 WorkManager.initialize(appContext, workManagerConfiguration)
        val constraints = Constraints.Builder()
            .setRequiresCharging(true)
            .setRequiredNetworkType(NetworkType.CONNECTED)
            .build()

val work = PeriodicWorkRequestBuilder<RefreshDataWork>(2, TimeUnit.HOURS)
            .setConstraints(constraints)
            .build()

WorkManager.getInstance(appContext)
            .enqueueUniquePeriodicWork(RefreshDataWork::class.java.name, KEEP, work)

PeriodicWorkRequestは反復作業または反復作業に使用されます。最小間隔は15分です。

OneTimeWorkRequestは一度だけ適用され、作業を繰り返すことはありません。

WorkManagerはシングルトンモードで順次実行され、アプリの起動時に1回実行されます。

コードGithubのダウンロードアドレス:

https://github.com/AlbertShen0211/Android-architecture-components

コードをよりよく理解するために、図面は次のようになっています

architecture.png

488件のオリジナル記事を公開 85 件を賞賛 230,000回の閲覧+

おすすめ

転載: blog.csdn.net/Coo123_/article/details/105072377