为了账号安全,请及时绑定邮箱和手机立即绑定

强制应用程序重新启动第一个活动

强制应用程序重新启动第一个活动

30秒到达战场 2019-09-19 16:52:31
由于未知原因,我无法正确地离开应用程序,因此当我再次按下主页按钮和应用程序图标时,我会恢复应用程序中的位置。我想强制应用程序在第一个Activity上重新启动。我想这与onDestroy()或者onPause()有关,但我不知道该怎么做。
查看完整描述

3 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

以下是使用PackageManager以通用方式重新启动应用程序的示例:


Intent i = getBaseContext().getPackageManager()

             .getLaunchIntentForPackage( getBaseContext().getPackageName() );

i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

startActivity(i);


查看完整回答
反对 回复 2019-09-19
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

标记为“回答”的解决方案有效,但有一个对我来说至关重要的缺点。使用FLAG_ACTIVITY_CLEAR_TOP,您的目标活动将在您的旧活动堆栈收到onDestroy之前调用onCreate。虽然我已经在onDestroy中清除了一些必要的东西,但我不得不工作。


这是对我有用的解决方案:


public static void restart(Context context, int delay) {

    if (delay == 0) {

        delay = 1;

    }

    Log.e("", "restarting app");

    Intent restartIntent = context.getPackageManager()

            .getLaunchIntentForPackage(context.getPackageName() );

    PendingIntent intent = PendingIntent.getActivity(

            context, 0,

            restartIntent, Intent.FLAG_ACTIVITY_CLEAR_TOP);

    AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

    manager.set(AlarmManager.RTC, System.currentTimeMillis() + delay, intent);

    System.exit(2);

}

我们的想法是通过AlarmManager触发PendingIntent,稍后会调用它,给旧活动堆栈一些时间来清理。


查看完整回答
反对 回复 2019-09-19
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

android:clearTaskOnLaunch="true"

android:launchMode="singleTask"

在启动类(第一个活动)的清单文件中使用此属性。


查看完整回答
反对 回复 2019-09-19
  • 3 回答
  • 0 关注
  • 447 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信