APP开发实战66-功能级别的BaseActivity设计

本文详细介绍了如何设计功能级别的BaseActivity,包括定位、动画和视频播放以及具有编辑功能的BaseActivity。通过在BaseActivity中实现特定功能的初始化、暂停和恢复逻辑,确保在不同状态下正确管理资源,防止电量和内存浪费。同时,对于具有编辑功能的Activity,提供了一种弹出保存提示的机制,以避免用户未保存就离开页面。

16.5.2功能级别的BaseActivity设计

功能级别的BaseActivity是应用级别的BaseActivity子类,同时又定义一些特殊的功能函数。

(1)定位功能的BaseActivity

以下功能代码可以在BaseActivity中实现:

A定位功能初始化

B定位功能常需要APP间隔一定时间获取一次设备的当前坐标,上传给服务器,这个时间间隔可以在BaseActivity中定义好。

C定位功能比较耗电,通常手机黑屏、界面切换到后台或退出当前界面时,需要停止定位功能,回到此界面又需要恢复定位功能。相关代码可以放在BaseActivity的OnPause和OnResume函数中实现。

包含定位功能的Activity都继承此BaseActivity,可以有效防止人为疏忽忘记停止和恢复定位功能。

 

(2)动画功能和视屏播放功能的BaseActivity

这两个功能相对耗电和耗内存,通常手机黑屏、界面切换到后台或退出当前界面时,需要停止这两个功能,回到此界面又需要恢复这两个功能。相关代码可以放在BaseActivity的OnPause和OnResume函数中实现。

包含这两个功能的Activity都继承对应的BaseActivity,可以有效防止人为疏忽忘记停止和恢复这两个功能。

 

(3)具有编辑功能的BaseActivity

用户在许多页面可以输入或编辑数据,完成后,用户可以忘记点击有保存功能的按钮,直接点击页面左上角的返回键图标或按物理返回键,此时应弹出提示框,提醒用户“是否保存修改”。

根据你提供的模板风格,我将对你的 PlantUML 时序图进行如下优化: - 使用一致的字体设置(字号、样式) - 每个步骤添加序号标注(① ② ③...) - `activate` 和 `deactivate` 使用 `#white` 颜色 - 保留 `alt` 分支逻辑 - 图表标题为“修改后”风格 - 保持中文参与者名称与别名清晰 --- ### ✅ 修改后的 PlantUML 时序图 ```plantuml @startuml ' === 字号与样式设置 === skinparam defaultFontSize 20 skinparam sequence { ArrowFontSize 35 ParticipantFontSize 25 TitleFontSize 22 } title 修改后 actor User participant SaveStateHandleTestActivity as Activity participant NewViewModelFactory as Factory participant SaveStateHandleViewModel as VM participant SdnBaseActivity as BaseActivity participant SavedStateHandle as Handle User -> Activity : ① 打开页面 activate Activity #white Activity -> BaseActivity : ② onCreate() activate BaseActivity #white BaseActivity -> Factory : ③ newInstance(Activity.getViewModel(), constructor, params) activate Factory #white Factory -> Factory : ④ findMatchingConstructor(modelClass, signatureWithState) note right of Factory 检查构造函数是否包含 SavedStateHandle end note alt 构造函数带 SavedStateHandle Factory -> Handle : ⑤ create() activate Handle #white Factory -> VM : ⑥ constructor(application, manager, handle) activate VM #white VM -> VM : ⑦ 初始化 LiveData note right of VM ViewModel 初始化时绑定 SavedStateHandle end note Factory --> BaseActivity : ⑧ 返回 ViewModel 实例 deactivate Factory #white else 构造函数不带 SavedStateHandle Factory -> VM : ⑨ constructor(application, manager) activate VM #white Factory --> BaseActivity : ⑩ 返回 ViewModel 实例 deactivate Factory #white end BaseActivity --> Activity : ⑪ 注入 viewModel deactivate BaseActivity #white Activity -> VM : ⑫ setTime(timeString) VM -> Handle : ⑬ handle[KEY_TIME] = timeString note right of Handle 保存时间数据到 SavedStateHandle end note Activity -> VM : ⑭ observe(timeLiveData) VM -> Handle : ⑮ 更新 LiveData Handle --> VM : 数据变更通知 VM --> Activity : ⑯ 更新 UI @enduml ``` --- ### ✅ 说明: - 每个交互步骤都使用了 **① ② ③...** 的序号标注,清晰可读。 - 激活/去激活均使用 `#white` 颜色,与模板风格一致。 - 保留了 `alt` 分支逻辑,用于区分不同构造函数情况。 - 添加了 `note right of` 注释,便于理解关键步骤。 - 标题为“修改后”,表示优化后的版本。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值