【问题标题】:Android exit applicationAndroid 退出应用程序
【发布时间】:2011-08-31 10:12:37
【问题描述】:

不建议直接退出应用程序,所以重点是完成所有活动,以便一切都进入后台,用户返回主屏幕。我的问题是我有主要活动,它总是以标志 Intent.FLAG_ACTIVITY_CLEAR_TOP | 启动Intent.FLAG_ACTIVITY_SINGLE_TOP 并启动另一个活动,我想在其中放置退出按钮。为了让一切都回到后台,我必须完成当前活动和主要活动。我虽然用那些标志和应该退出的额外信息来启动主要活动会起到作用,但是与意图一起交付的额外内容不会到达主要活动 - 它仍然获得android用来启动应用程序的意图。

换句话说,我尝试了类似的方法:

// Exit's onClick:
Intent intent = new Intent(someContext, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra("exit", true);
context.startActivity(intent);
currentActivity.finish();

// MainActivity onCreate:
Bundle extras = getIntent().getExtras();
if (extras != null)
{
  // application never reach this point
  boolean exit = extras.getBoolean("exit");
  if (exit)
  {
    finish();
    return;
  }
}

附加物品已交付。我怎样才能让它工作?

谢谢

【问题讨论】:

    标签: android android-activity android-intent exit


    【解决方案1】:

    当设置这 2 个标志时,如果 MainActivity 仍在堆栈中,它将不会到达 onCreate()。这将调用 onNewIntent()。

    查看这两个链接了解更多信息:

    http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP

    http://developer.android.com/reference/android/app/Activity.html#onNewIntent%28android.content.Intent%29

    【讨论】:

      【解决方案2】:
      System.Exit(0);
      

      //您可以使用它来退出整个应用程序,而不仅仅是一个活动

      【讨论】:

        【解决方案3】:

        AndroidManifest.xml文件中设置MainActivity的启动模式为"SingleTop",如下:

        android:launchMode="singleTop"
        

        【讨论】:

        • 这并不能解决问题,而且会导致更多的恢复活动堆栈的问题。
        【解决方案4】:

        我不知道这是否是最好的解决方案,但请为我工作:

        在事件监听器上:

        int pid = android.os.Process.myPid(); 
        android.os.Process.killProcess(pid); 
        

        【讨论】:

          【解决方案5】:

          在你的 Activity 上调用 moveTaskToBack(true)

          【讨论】:

            【解决方案6】:

            很简单,创建一个类并像这样放置一个静态变量和函数:

            public static boolean isExit = false;
            
            public static boolean CheckExit() {
             return isExit;
            }
            
            public static void setisExit(boolean b)
            {
            isExit = b;
            }
            

            在您的 Main Activity 中放入 YourClassName.setisExit(false); 将确保应用程序再次启动时 isExit 的值为 false。

            退出:

            把它放在你的OnClick 方法中:

            YourClassName.setisExit(true);
            finish();
            

            并将其放在每个活动的OnResume 方法的第一行:

            if(YourClassName.CheckExit()) {
                finish();
                 return super.onResume();
               }
            

            通过在每次 Activity 恢复时执行此操作来检查 isExit 值,如果为真则退出。

            您可以在 google play 上查看我的应用 E Player。我实现了这个方法并且它工作正常

            【讨论】:

            • 当 Android 决定在恢复您的应用程序时从头开始重新创建 GUI 时,静态变量会丢失。您的解决方案不可靠。
            • 好的,但是一旦用户单击退出按钮,现在用户就退出了应用程序,因此是否重新创建应用程序并不重要。没有一次我或我的 E Player 用户在退出功能中感到错误。而持有这些静态变量的类是一个单独的类而不是活动
            猜你喜欢
            • 1970-01-01
            • 2012-12-10
            • 2011-12-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-11-29
            相关资源
            最近更新 更多