首页 文章 精选 留言 我的

精选列表

搜索[jetpack],共244篇文章
优秀的个人博客,低调大师

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启动时执行一次。 代码Github的下载地址: https://github.com/AlbertShen0211/Android-architecture-components 为了更好的理解代码,附图如下

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册