不可以錯過的Android學習!帶你看Android Jetpack 最佳開發姿勢!

yilian發表於2020-03-18

Android Jetpack 最佳開發姿勢

不可以錯過的Android學習!帶你看Android Jetpack 最佳開發姿勢!

Android架構元件基礎上,融入 Kotlin協程 +retrofit,模擬網路,全面快速開發。

Navigation

NavController在  NavHost 中管理應用導航的物件,沿導航圖中的特定路徑導航至特定目標,或直接導航至特定目標。

首先,定義  layout/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 Activity的新增,需要先在 Project建立對應的 Activity,即可在佈局設計器處理。

  <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()

Databinding

onCreateView()中直接使用控制元件,會報空指標異常,這個姿勢 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

一種可觀察的資料儲存器類,具有生命週期感知能力,意指它遵循其他應用元件(如 ActivityFragment 或  Service)的生命週期。

     var plantName = gardenPlantings.map {
          ...
      }

map實現 LiveData的轉換

Room

建立應用資料的快取,  SQLite的基礎上提供了一個抽象層,充分利用 SQLite 的強大功能,更強健的資料庫訪問機制。

使用 Room 引用複雜資料, Room 提供了在基本型別和包裝型別之間進行轉換的功能,但不允許實體之間進行物件引用。

要為自定義型別新增此類支援,您需要提供一個  TypeConverter,它可以在自定義類與  Room 可以保留的已知型別之間來回轉換。

  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

認為是協程 suspend

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按順序執行,單例模式, app啟動時執行一次。

三、總結

對於進階這條路而言,學習是會有回報的!

你把你的時間投資在學習上,就意味著你可以收穫技能,更有機會增加收入。

附上我的Android核心技術學習大綱,獲取相關內容來我的GitHub一起玩耍:
vx:xx1341452

分享我的Android學習PDF大全來學習,這份Android學習PDF大全真的包含了方方面面了,內含Java基礎知識點、Android基礎、Android進階延伸、演算法合集等等

不可以錯過的Android學習!帶你看Android Jetpack 最佳開發姿勢!

我的這份學習合集,可以有效的幫助大家掌握知識點。

總之也是在這裡幫助大家學習提升進階,也節省大家在網上搜尋資料的時間來學習,也可以分享給身邊好友一起學習

獲取方式:關注我看個人介紹,或直接  點選我免費領取


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952849/viewspace-2681256/,如需轉載,請註明出處,否則將追究法律責任。

相關文章