我有一个简单的应用程序,在我做任何事情之前,我必须检查用户是否已登录。为此,我继承了Application
类:
public class GBApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
if (userIsLoggedIn()) {
Intent overviewActivity = new Intent(this, Overview.class);
overviewActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(overviewActivity);
}
}
}
userIsLoggedIn()
返回存储在SharedPreferences
文件中的布尔。
一切都起作用,但是当我从Overview
活动中向后退时,它会将我重定向到默认活动(MainActivity
),并将其从AndroidManifest.xml
文件中删除,给出了错误。另外,我无法称呼finish()
,因为这是一个非活动类。
从Overview
类返回后,如何终止程序?我找到了将其传递给MainActivity
的解决方案,从那里调用finish()
。但这似乎很复杂。我还能做什么?
这是我的 application
标签 AndroidManifest.xml
您的计划将引起问题。每次创建过程时,即使在此特定过程中不需要活动也不需要活动。
也是如此。显示启动器活动—例如,为了响应用户在主屏幕启动器图标上敲击—是一种的方式,可以为您的应用创建一个过程。但是还有很多:
-
AlarmManager
-
JobScheduler
-
Notification
- 推送消息(例如,来自Firebase Cloud Messaging)
- 发送给您从应用程序导出的
ContentProvider
的请求 - 发送给您从应用程序导出的
Service
的请求 - 明显注册的
BroadcastReceiver
- 用户在概述屏幕中返回您的任务
- 等等
在这些情况下,任何一个都不必然显示此活动。但是,您的代码将在所有活动中显示活动,因为任何时候Android forks都会为您的应用程序提供一个过程,您都会显示此活动。
拥有您的所有活动(除登录名外)查看用户是否已登录,如果需要的话,将用户路由到登录活动。当用户完成登录并完成登录活动时,用户将返回到试图去的位置,无论是您的启动器活动还是其他活动(例如,在您的应用程序中,他们返回您的任务背景一段时间,因此您的过程被终止,但是Android试图将它们发送回您最后一次的活动)。
您可以简单地覆盖概述性的onbackpressed(),并驾驶时,当按下返回按钮时,应用程序的方向(在您的情况下都要关闭应用程序):
@Override
public void onBackPressed(){
startActivity(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
}
上面的代码立即关闭您的应用程序,单击后返回按钮(这很无聊..但很简单)。您也可以在下面尝试代码段;它弹出一个对话框:
@Override
public void onBackPressed(){
new AlertDialog.Builder(this)
.setMessage("Are you sure you want to exit?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int id){
startActivity(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
}
})
.setNegativeButton("No", null)
.show();
}