【发布时间】:2020-05-18 16:52:23
【问题描述】:
我有一个小型 android 应用程序,其中包含 1 个主要活动(已启动的活动,任何人都可以使用)和一些 3 个其他活动,需要 登录 带有密码。
我创建了一个应用程序类来保存某人是否登录的信息。
此外,用户应在 5 分钟不活动后退出并自动发送到主要活动。为此,我在应用程序类中创建了一个线程,该线程会休眠 5 分钟,然后注销用户并调出主要活动。
这里是相关代码:
public void setLoggedOut() {
isLoggedIn = false;
if (mTimerThread != null) {
mTimerThread.interrupt();
}
Intent myIntent = new Intent(MyApplication.this.getBaseContext(), MainActivity.class);
myIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(myIntent);
}
上面的 startActivity 在某些设备(平板电脑)上有效,在其他设备上我收到以下错误并且应用程序崩溃:
android.util.AndroidRuntimeException:从 Activity 上下文之外调用 startActivity() 需要 FLAG_ACTIVITY_NEW_TASK 标志。这真的是你想要的吗?
当然我不想要一个新任务,而只是完成所有其他活动并返回主要活动(FLAG_ACTIVITY_CLEAR_TOP 听起来是正确的)。 stackoverflow 中已经有出现此错误的线程,但没有任何帮助解决我的问题。
正如在某些设备上(甚至在 Android Studio 中模拟)所提到的,它可以正常工作,但在某些设备上却不能。可能是 API 级别的问题(API 25/Android 7.1.1 有效,API 22/Android 5.1 没有),但我不确定...
我可以(可能)在每个活动中分别实现超时机制,但在我看来这不是最好的解决方案,我讨厌在不需要时复制代码。
有什么想法吗?替代/更好的概念?
【问题讨论】: