不可以錯過的Android學習!帶你看Android Jetpack 最佳開發姿勢!
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
一種可觀察的資料儲存器類,具有生命週期感知能力,意指它遵循其他應用元件(如
Activity
、
Fragment
或
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進階延伸、演算法合集等等
我的這份學習合集,可以有效的幫助大家掌握知識點。
總之也是在這裡幫助大家學習提升進階,也節省大家在網上搜尋資料的時間來學習,也可以分享給身邊好友一起學習
獲取方式:關注我看個人介紹,或直接 點選我免費領取
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952849/viewspace-2681256/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android Jetpack - Android TV 應用開發教程AndroidJetpack
- 滿足你各種姿勢的最美Android開源日曆Android
- 【轉】Android三種姿勢帶你玩轉360度全景圖功能Android
- 寫給 Android 開發者的 Gradle 系列(一)基本姿勢AndroidGradle
- Android Sunflower 帶您玩轉 JetpackAndroidJetpack
- 程式設計師不可以錯過的Android元件化神器-ServicePool!程式設計師Android元件化
- 輕輕鬆鬆帶你入門Android Jetpack(含Jetpack Compose),容易肝不難!AndroidJetpack
- 作業系統正確的學習姿勢 --- 你不可錯過的寶藏資源作業系統
- 小司機帶你學習單例模式的六種姿勢!單例模式
- 學習軟體開發的正確姿勢
- Android開發學習之路Android
- 這些學習網站你一定不可以錯過學習網站
- Android小技巧:Android開發究竟該如何學習,年薪超過80萬!Android
- Android Pie的9個隱藏功能:你可能錯過的若干最佳技巧Android
- Android開發-獲取系統輸入法高度的正確姿勢Android
- Android開發 - 獲取系統輸入法高度的正確姿勢Android
- Android Jetpack - DataBindingAndroidJetpack
- Android開發學習之路03Android
- Android 開發學習筆記Android筆記
- Android開發學習(9)--BeatBox(2)Android
- Android Jetpack 之 LiveDataAndroidJetpackLiveData
- Android Jetpack之ViewModelAndroidJetpackView
- Android Jetpack 之 LifecycleAndroidJetpack
- Android Jetpack 之 ViewModelAndroidJetpackView
- 【經驗】學習android開發的步驟Android
- Android學習之活動的最佳實踐Android
- 姿勢擺好,一招學會android的佈局優化!Android優化
- Android Studio 專案匯入的正確姿勢Android
- Android 3分鐘帶你入門開發測試Android
- android開發中犯的小錯誤,不要學我!Android
- Android FrameWork學習(二)Android系統原始碼除錯AndroidFramework原始碼除錯
- Android開發者必備的技能你會嗎?MVVM 最新學習心得!AndroidMVVM
- Android 開發學習程式0.32 dwonloadmanager使用Android
- Android Jetpack Navigation基本使用AndroidJetpackNavigation
- (學習)godot4.2 Android除錯GoAndroid除錯
- Android Jetpack(2):DataBinding的基本使用AndroidJetpack
- Android開發錯誤集錦Android
- Android開發中API層的最佳實踐AndroidAPI