我是Android开发中的新手,经过几个小时的测试,文档和论坛阅读后,我仍然无法管理和了解如何处理Android生命周期
让我们看一下我应用的活动流程(我觉得非常经典): 飞溅 - >登录 - >主
在启动画面中,我需要实例化并启动“购物”。对象,这将是我的应用程序的全局,并用于所有其他活动。 开始时间很长(大约10秒),因为需要服务器身份验证,数据下载和数据预处理。
每当应用程序“关闭”时,都应将其从最新应用中删除,并且必须关闭商店(客户要求) 如果应用程序重新启动,则需要返回启动活动并重新实例化商店
目前,我首先实施的内容如下:
// splash activity
private fun goToLogin() {
runOnUiThread {
startActivity(Intent(this, LoginActivity::class.java))
finish()
}
}
// login activity
private fun goToMain() {
runOnUiThread {
startActivity(Intent(this, MainActivity::class.java))
finish()
}
}
// in app class
fun quit(ctx: Activity) {
ctx.finishAndRemoveTask()
// close shop and kill app
shop.close()
android.os.Process.killProcess(android.os.Process.myPid())
}
它没有按预期工作: 首先,它不是一个Android goood实践:操作系统应该管理自己的应用程序关闭。 其次,即使申请被关闭,另一个似乎在被杀之后立即开始。 我添加了以下代码来演示:
// app onCreate()
override fun onCreate() {
super.onCreate()
Thread {
while (true) {
Thread.sleep(1000)
log.info("APP RUNNING")
}
}.start()
}
我继续有#34; APP RUNNING"应用程序退出后在我的日志中(但在另一个Thread pid中)
所以我只是尝试删除killProcess()并让应用程序继续离开。 问题是,现在,当我重新启动应用程序时,我直接进入“登录”状态。活动,而不是泼水。 不知道为什么,我的清单看起来是正确的,并且在重新开始时,我按照预期进行飞溅活动。
<activity
android:name="com.thalesgroup.dk.mark.app.activities.SplashActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.thalesgroup.dk.mark.app.activities.LoginActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.thalesgroup.dk.mark.app.activities.MainActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
因此,如果您对Android的良好实践和我的应用程序的方式有任何意见,我将不胜感激! 感谢
答案 0 :(得分:0)
如果你没有在另一个线程中调用,那么首先你不需要runOnUiThread。
runOnUiThread {
startActivity(Intent(this, LoginActivity::class.java))
finish()
}
究竟“商店必须关闭”,您是否必须向服务器发送请求以关闭商店?如果您没有发送请求,那么在应用程序终止时无需担心商店对象,它将被清除。但是,如果您必须手动清除它,则无法确定已杀死的应用程序。因为用户滑动应用程序时没有回调。如果用户在几分钟后什么都不做,并且在初始化请求时重新初始化,也许其中一个解决方案可以自行关闭它。 希望这会对你有所帮助。