项目背景:近日在项目组代码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>
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END