專案背景:近日在專案組代碼review中,了解了一個小細節,就是SplashActivity頁面我們通常都是使用一個hander.postDelayed,3秒后執行runnable,有沒有考慮一下,當進入閃屏頁面,按下home鍵的操作呢?實驗發現在某些機型下,當我們進入閃屏頁面,按下home健,手機進入到home頁面進行其他操作,但是過了一會兒,我們的程式會被拉起進入主頁面,好了廢話有點多,下面上代碼解決一下這個問題,
xml中的代碼就不寫了,就是給父布局設定一個背景圖就ok了
SplashActivity
class SplashActivity : AppCompatActivity() {
companion object {
private const val TAG = "SplashActivity"
}
private val handler:Handler=Handler()
private lateinit var runnable: Runnable
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_splash)
runnable= Runnable {
val intent=Intent(this,MainActivity::class.java)
startActivity(intent)
finish()
}
}
override fun onPause() {
super.onPause()
Log.d(TAG, "onPause: ")
handler.removeCallbacks(runnable)//handler洗掉執行緒
}
override fun onResume() {
super.onResume()
Log.d(TAG, "onResume: ")
handler.postDelayed(runnable,3000)
}
}
這里我需要在啰嗦一下,程式啟動會執行activity生命周期,onCreate()->onResume()方法,當按下home鍵回到主界面,activity執行onPause(),當我們再次進入程式再次會執行onResume(),
程式啟動我們在onResume方法中執行 handler.postDelayed(runnable,3000)這個延時執行的任務,我們不進行操作,程式就會理所當然的等待3秒鐘進入主頁面了,這里我們當我們進入SplashActivity時迅速按下home鍵(不要超過延時執行的時間,代碼中也就是3秒)程式執行onPause()方法,這里我們使用handler.removeCallbacks(runnable)就會洗掉回呼,所以就不會在執行runable里面的代碼,也就不會出現程式又被拉起進入MianActivity了
SplashActivity通常都是全屏顯示的我們需要給SplashActivity添加一個Theme
<style name="Fullscreen" parent="Theme.WeatherMvvm">
<item name="android:windowFullscreen">true</item>
</style>
在AndroidManifest.xml中設定一下Theme
<activity android:name=".SplashActivity"
android:theme="@style/Fullscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/277366.html
標籤:其他
上一篇:VHDL快速入門
下一篇:C++ 實作一個復數類
