我知道这个问题在SO上被问过这么多次,所以请你花点时间投票。我经历了How to remove application from recent application list?
Quitting an application - is that frowned upon?
Close application and remove from recent apps
关于SO的许多其他问题。
在我的应用程序中,我将用户登录详细信息存储在SharedPreferences中。基本上当我的应用程序启动时 - 活动A - 启动画面将显示3秒钟。然后它将转到活动B - 用户登录页面,在登录时,凭据存储在SharedPreference中。然后它将转到活动C - 主页。 我不希望用户每次都输入登录详细信息,因此我将它们存储在SharedPreference中,如果该值存在,则直接重定向到活动C - 主页。
所以流程是这样的,
如果SharedPreference为空
A->B->C
如果SharedPreference中存在值
A->B->C, I'm checking in Activity B and when the values are present redirect it to C without making the B to come to front.
如果我从启动器打开应用程序,这一切都正常。但是如果我从最近的列表中打开它,即使这些值存在于SharedPreference中,它也会转到活动B.当我从启动器或最近的列表中打开它时,活动A(启动屏幕)不会显示。只有当我注销并打开它出现的应用程序时。会出现什么问题?
我厌倦了<activity android:excludeFromRecents="true">
,因此强迫它不要出现在最近的列表中。即使在此之后如果我从启动器打开它,它也会进入登录页面,即活动B.
我在活动C上覆盖了这样的后退按钮
public void onBackPressed() {
if (backPressedOnce) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
super.onBackPressed();
return;
}
this.backPressedOnce = true;
Toast.makeText(this, "Please press back again to exit.", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
backPressedOnce = false;
}
}, 3000);
}
public void onResume()
{
super.onResume();
this.backPressedOnce = false ;
}
所以我有两个问题
Q1)每次用户启动时如何制作启动画面? Q2)如果从最近的列表中启动,为什么即使SharedPreference具有值,它也不会重定向到活动C?
很抱歉提出非常冗长的问题,我知道这是不合适的。 谢谢
答案 0 :(得分:3)
我会把我的想法......
为什么你要检查B中的共享偏好?如果您已存储在sharedprefernce中,则将用户从A直接重定向到C.
if(sharedPreference) - &gt; ç
否则B - &gt; ç
当你从最近的afaik启动它将调用onresume而不是oncreate而且我相信你正在检查oncreate因此它从最近启动时没有执行,使用日志知道周期也请参考活动生活周期。
如果您不需要活动存在,您可以调用finish()并在清单中放入noHistory ='true'...
请看这些观点并纠正我,如果我错在哪里......
希望它有助于你...