안드로이드 제트 팩 최고의 개발 자세
에서 Android
의 통합을 기반으로 아키텍처 구성 요소 Kotlin
코 루틴 +retrofit
, 네트워크 시뮬레이션, 포괄적이고 신속한 개발.
항해
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()
데이터 바인딩
에서 onCreateView()
사용 직접적인 제어보고 널 포인터 예외 것,이 위치 binding.tvNavigation
할 수있다.
val binding = FragmentHomeBinding.inflate(inflater, container, false)
binding.tvNavigation.setOnClickListener {
navigateToDetailPage("1", it)
}
지금처럼 레이아웃 파일, 문자열 연결, ViewModel
다음과 함께 사용했을 때
android:text='@{"Data From Network-> "+viewModel.response}'
뷰 모델
저장 및 인터페이스 관련 데이터의 수명주기를 관리합니다. Kotlin
코 루틴은 viewModelScope
경우, ViewModel
삭제, 그것은 코 루틴은 자동으로 취소됩니다 시작이 범위에있다.
private val homeViewModel: HomeViewModel by viewModels {
InjectorUtils.provideHomeViewModelFactory(requireContext())
}
viewModelScope.launch {
...
}
LiveData
그것은 다른 응용 프로그램 구성 요소 (예를 들어, 다음과 의미 인식의 수명주기와 관측 데이터 저장소 클래스,, Activity
, Fragment
또는 Service
) 수명주기를.
var plantName = gardenPlantings.map {
...
}
map
달성 LiveData
변환
방
캐시 응용 프로그램 데이터를 생성, 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
시작을 수행합니다.
셋째, 요약
이 방법으로 고급의 경우, 학습은 갚을 것이다!
당신은 학습에 투자 할 시간이 걸릴, 당신이, 기술을 습득 수익을 증대 할 수있는 기회를 가질 수 있다는 것을 의미한다.
내 GitHub의 놀 관련 콘텐츠에 내 안드로이드 핵심 기술 학습 계획서, 액세스를 묶 https://github.com/Meng997998/AndroidJX
내 안드로이드 PDF Daquan을 배우고 배우 공유,이 안드로이드 PDF Daquan의 정말 모든 측면을 포함 배우고, 수집 알고리즘에 너무 기본적인 자바 지식, 안드로이드, 안드로이드 고급 확장의 기초 등을 포함
내 컬렉션이 연구는 효과적으로 당신이 지식 포인트를 파악하는 데 도움이 될 수 있습니다.
즉 우리는 고급 학습 향상에 도움 여기에 또한뿐만 아니라, 또한 가까운 친구들이 함께 공부와 공유 할 수 있습니다 당신에게 온라인 검색 데이터를 배울 수있는 시간을 절약 할 수