在不启动应用程序的情况下启动 activity
start activity without launching the application
这是用例:
1.用户登录应用程序并按下硬件主页按钮,应用程序被发送到后台
2. 我在后台 运行 一个处理程序来检查 inactivity 超时是否为 5 分钟。然后我需要调用注销API并开始登录activity,而不启动或将应用程序带到前台
这是我试过的
if (!mIsAppInForeground) {
Log.d("App in background", "App in background and timing out");
activity.startService(new Intent(activity,LogOutBackGroundService.class).addFlags( Intent.FLAG_ACTIVITY_MULTIPLE_TASK ));
}
public class LogOutBackGroundService extends Service {
public static final String HAS_SIGNED_OUT = "hasSignedOut";
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
intent.putExtra(HAS_SIGNED_OUT, true);
startActivity(new Intent(this, LoginActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
return START_NOT_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
应用正常超时,登录 activity 正在启动,但应用被带到前台(即应用正在启动)。我希望这只发生在后台。只有当用户重新启动应用程序时,他才应该再次看到登录屏幕
在典型的注销场景中,单击注销按钮应该只是开始登录 activity 清除登录详细信息。在你的情况下,5 分钟后你应该尝试清除存储的登录令牌(假设你存储登录详细信息供用户在需要时自动登录)。当用户下次启动应用程序时,您的 LAUNCHER activity 将检查存储的令牌以启动所需的 activity.
startactivity(intent)
弹出后台堆栈 activity 或创建一个新的(如果不存在).. 所以你的解决方案是有 onResume()
和 onPause()
。 . onPause()
在 activity 消失时调用,onResume()
在看到 activity 时调用,所以我给你的建议是创建一个布尔值,它可以在单身人士 class
public class MySingletonClass {
public static boolean startloginpage; // by default its false
}
然后你在 mainactivity 或用户将启动或返回的 activity 中,将代码放在其 onresume
@Override
public void onResume() {
// TODO Auto-generated method stub
super.onResume();
if(MySingletonClass.startloginpage){ //check if your boolean is true
// if it checks out then call do what you want to do when the user times run out
}else{
// if it doesn't check out continue without telling user to login,
}
}
在您的服务中删除意图代码并将其放入
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
intent.putExtra(HAS_SIGNED_OUT, true);
MySingletonClass.startloginpage = true;
return START_NOT_STICKY;
}
这是用例: 1.用户登录应用程序并按下硬件主页按钮,应用程序被发送到后台 2. 我在后台 运行 一个处理程序来检查 inactivity 超时是否为 5 分钟。然后我需要调用注销API并开始登录activity,而不启动或将应用程序带到前台 这是我试过的
if (!mIsAppInForeground) {
Log.d("App in background", "App in background and timing out");
activity.startService(new Intent(activity,LogOutBackGroundService.class).addFlags( Intent.FLAG_ACTIVITY_MULTIPLE_TASK ));
}
public class LogOutBackGroundService extends Service {
public static final String HAS_SIGNED_OUT = "hasSignedOut";
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
intent.putExtra(HAS_SIGNED_OUT, true);
startActivity(new Intent(this, LoginActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
return START_NOT_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
应用正常超时,登录 activity 正在启动,但应用被带到前台(即应用正在启动)。我希望这只发生在后台。只有当用户重新启动应用程序时,他才应该再次看到登录屏幕
在典型的注销场景中,单击注销按钮应该只是开始登录 activity 清除登录详细信息。在你的情况下,5 分钟后你应该尝试清除存储的登录令牌(假设你存储登录详细信息供用户在需要时自动登录)。当用户下次启动应用程序时,您的 LAUNCHER activity 将检查存储的令牌以启动所需的 activity.
startactivity(intent)
弹出后台堆栈 activity 或创建一个新的(如果不存在).. 所以你的解决方案是有 onResume()
和 onPause()
。 . onPause()
在 activity 消失时调用,onResume()
在看到 activity 时调用,所以我给你的建议是创建一个布尔值,它可以在单身人士 class
public class MySingletonClass {
public static boolean startloginpage; // by default its false
}
然后你在 mainactivity 或用户将启动或返回的 activity 中,将代码放在其 onresume
@Override
public void onResume() {
// TODO Auto-generated method stub
super.onResume();
if(MySingletonClass.startloginpage){ //check if your boolean is true
// if it checks out then call do what you want to do when the user times run out
}else{
// if it doesn't check out continue without telling user to login,
}
}
在您的服务中删除意图代码并将其放入
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
intent.putExtra(HAS_SIGNED_OUT, true);
MySingletonClass.startloginpage = true;
return START_NOT_STICKY;
}