안드로이드하지 미스 학습 할 수 있습니다! 당신은 안드로이드 제트 팩 최고의 개발 자세를 참조하십시오!

안드로이드 제트 팩 최고의 개발 자세

에서 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의 정말 모든 측면을 포함 배우고, 수집 알고리즘에 너무 기본적인 자바 지식, 안드로이드, 안드로이드 고급 확장의 기초 등을 포함

내 컬렉션이 연구는 효과적으로 당신이 지식 포인트를 파악하는 데 도움이 될 수 있습니다.

즉 우리는 고급 학습 향상에 도움 여기에 또한뿐만 아니라, 또한 가까운 친구들이 함께 공부와 공유 할 수 있습니다 당신에게 온라인 검색 데이터를 배울 수있는 시간을 절약 할 수

게시 된 168 개 원래 기사 · 원 찬양 71 ·은 20000 +를 볼

추천

출처blog.csdn.net/Aerfa789/article/details/104954542