- Android Jetpack開發:原理解析與應用實戰
- 黃林晴
- 669字
- 2022-07-05 09:43:56
2.1 從廣告引導頁的需求說起
在實際App項目開發中,廣告引導頁是一個很常見的需求,具體描述如下:
- 用戶打開App顯示5秒鐘的廣告,廣告結束后進入App主頁面。
- 廣告結束前,用戶可以點擊跳過廣告。
- 頁面銷毀時,計時器銷毀。
下面通過代碼實現上述需求,首先新建一個廣告管理工具類AdvertisingManage,在AdvertisingManage中新建計時開始、終止等方法,具體如下:
class AdvertisingManage { var TAG = "AdvertisingManage" //監聽事件 var advertisingManageListener: AdvertisingManageListener? = null //定時器 private var countDownTimer: CountDownTimer? = object : CountDownTimer(5000, 1000){ override fun onTick(millisUntilFinished: Long) { Log.d(TAG, "廣告剩余${(millisUntilFinished / 1000).toInt()}秒") advertisingManageListener?.timing((millisUntilFinished / 1000).toInt()) } override fun onFinish() { Log.d(TAG, "廣告結束,準備進入主頁面") advertisingManageListener?.enterMainActivity() } } /** * 開始計時 */ fun start() { Log.d(TAG, "開始計時") countDownTimer?.start() } /** * 停止計時 */ fun onCancel() { Log.d(TAG, "停止計時") countDownTimer?.cancel() countDownTimer = null } /** *廣告管理接口 */ interface AdvertisingManageListener { /** * 計時 * @param second秒 */ fun timing(second: Int) /** * 計時結束, 進入主頁面 */ fun enterMainActivity() } }
然后在引導頁AdvertisingActivity中,基于onCreate方法實現開始計時,基于onDestroy方法實現取消計時,AdvertisingActivity的主要代碼如下:
class AdvertisingActivity : AppCompatActivity() { //跳過廣告按鈕 lateinit var btnIngore: Button //廣告時間 lateinit var tvAdvertisingTime: TextView private var advertisingManage: AdvertisingManage? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_advertising) btnIngore = findViewById(R.id.btn_ignore) tvAdvertisingTime = findViewById(R.id.tv_advertising_time) advertisingManage = AdvertisingManage() advertisingManage?.advertisingManageListern = object : AdvertisingManage.AdvertisingManageListern { override fun timing(second: Int) { tvAdvertisingTime.text = "廣告剩余$second秒" } override fun enterMainActivity() { MainActivity.actionStart(this@AdvertisingActivity) finish() } } //跳過廣告點擊事件 btnIngore.setOnClickListener { MainActivity.actionStart(this@AdvertisingActivity) finish() } //開始廣告 advertisingManage?.start() } override fun onDestroy() { super.onDestroy() advertisingManage?.onCancel() } }
運行程序,在5秒后廣告會自動結束,運行日志如圖2-1所示。

圖2-1 運行日志
再次運行程序,在第3秒時,點擊跳過廣告,運行日志如圖2-2所示。

圖2-2 跳過廣告運行日志
這樣就實現了廣告引導頁的需求,但是這種實現方式不夠優雅,因為開發者需要在Activity對應生命周期的方法中主動執行相關的方法,當與生命周期相關聯的方法越來越多時,業務的改動就會導致Activity層的處理邏輯難以維護,那么有沒有什么辦法可以讓管理類主動執行Activity對應生命周期的方法呢?這就是本章要認識的第一個Jetpack組件——Lifecycle。
推薦閱讀
- Learning LibGDX Game Development(Second Edition)
- C語言程序設計實踐教程(第2版)
- 工程軟件開發技術基礎
- Linux核心技術從小白到大牛
- Mastering matplotlib
- PhpStorm Cookbook
- 深入RabbitMQ
- Python深度學習:基于TensorFlow
- Windows內核編程
- Getting Started with LLVM Core Libraries
- Learning Concurrency in Kotlin
- Scala Data Analysis Cookbook
- Web性能實戰
- Using Yocto Project with BeagleBone Black
- 零基礎入門Python數據分析與機器學習