我有一个简单的应用程序,在我做任何事情之前,我必须检查用户是否登录。
为此,我继承了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()
。但这似乎很复杂。
我还能做什么?
这是AndroidManifest.xml
application
标记
答案 0 :(得分:1)
你的计划会引发问题。每次创建流程时,即使此特定流程不需要活动,也会启动活动。
显示启动器活动(例如响应用户点击主屏幕启动器图标)是一种方式,可以为您的应用创建流程。但还有很多其他人:
AlarmManager
JobScheduler
Notification
ContentProvider
的请求Service
的请求BroadcastReceiver
在这些场景中,没有一个显示此活动必然是合适的。但是,您的代码会在所有代码中显示活动,因为只要Android为您的应用分配流程,您就会显示此活动。
让您的所有活动(登录帐户除外)查看用户是否已登录,并在需要时将用户路由到登录活动。当用户完成登录并且登录活动结束时,用户将返回到他们尝试去的地方,无论是您的启动器活动还是其他一些活动(例如,他们在您的应用程序进入之后返回到您的任务有一段时间的背景,所以你的进程被终止了,但是Android会尝试将它们发送回你最后的任何活动。
答案 1 :(得分:0)
您可以简单地覆盖overviewActivity的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();
}