Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何杀死android应用程序中的所有活动?_Android_Dialog - Fatal编程技术网

如何杀死android应用程序中的所有活动?

如何杀死android应用程序中的所有活动?,android,dialog,Android,Dialog,当我点击对话框中的“否”按钮时,我想关闭android中的total应用程序。我使用了以下代码 protected Dialog onCreateDialog(int id) { switch (id) { case 0: AlertDialog.Builder builder1 = new AlertDialog.Builder(this); builder1.setTitle("GASIMIZER"); builder1.setCancelable(fa

当我点击对话框中的“否”按钮时,我想关闭android中的total应用程序。我使用了以下代码

protected Dialog onCreateDialog(int id) {
switch (id) {
    case 0:
      AlertDialog.Builder builder1 = new AlertDialog.Builder(this);

    builder1.setTitle("GASIMIZER");
    builder1.setCancelable(false)
    .setPositiveButton("YES",
    new DialogInterface.OnClickListener() {
         public void onClick(DialogInterface dialog,int which) {
           Intent i = new Intent(Finalpage.this,NewproActivity.class);
        startActivity(i);
     }
    })
    .setNegativeButton("NO",new DialogInterface.OnClickListener() {

    public void onClick(DialogInterface dialog,int which) 
       {
            quit();

    }
    });

    AlertDialog alert1 = builder1.create();
    alert1.show();
    break;

    }
    return null;
    }

    public void quit() {
        onDestroy();
    }

请任何人告诉我如何解决这个问题。

你不应该自己调用
onDestroy()。。而是调用
finish()
关闭活动


自己调用活动生命周期方法是不好的做法(不知道是否可能)。它们是由Android操作系统本身处理的。

你应该不要关闭你的应用程序。你应该让ActivityManager来处理这个问题


特别是,如果您希望用户离开应用程序,然后通过意图将其发送到主屏幕。

您可以在活动中调用
finish()
方法,并以编程方式调用主屏幕(模拟home按钮),如下所示:

private void endApplication() {
    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.addCategory(Intent.CATEGORY_HOME);
    startActivity(intent);
}
public static ArrayList<WeakReference<Activity>> activity_stack=new ArrayList<WeakReference<Activity>>();
/**
 * Add the activity as weak reference to activity stack.
 * @param act
 */
public static void addToActivityStack(Activity act)
{
    WeakReference<Activity> ref = new WeakReference<Activity>(act);
    activity_stack.add(ref);

}
Constants.addToActivityStack(this);

让我们简单地做一点。假设您有一个类
Constants.java
,您将应用程序的所有重用常量放在该类中。在该类中,声明一个如下所示的活动堆栈:

private void endApplication() {
    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.addCategory(Intent.CATEGORY_HOME);
    startActivity(intent);
}
public static ArrayList<WeakReference<Activity>> activity_stack=new ArrayList<WeakReference<Activity>>();
/**
 * Add the activity as weak reference to activity stack.
 * @param act
 */
public static void addToActivityStack(Activity act)
{
    WeakReference<Activity> ref = new WeakReference<Activity>(act);
    activity_stack.add(ref);

}
Constants.addToActivityStack(this);
现在在
Constants.java

    /**
 * Kill all the activities on activity stack except act.
 * To kill all the passed parameter should be null.
 */
public static void killAllExcept(Activity act)
{
    for(WeakReference<Activity> ref:Global.activity_stack)
    {
        if(ref != null && ref.get() != null)
        {
            if(act != null && ref.get().equals(act)) 
            {
                continue;//dont finish this up.
            }
            ref.get().finish();
        }
    }
    activity_stack.clear();//but clear all the activity references
}
/**
*杀死活动堆栈上除act之外的所有活动。
*若要终止,所有传递的参数都应为null。
*/
公共静态无效killAllExcept(活动法)
{
for(WeakReference ref:Global.activity\u堆栈)
{
if(ref!=null&&ref.get()!=null)
{
if(act!=null&&ref.get().equals(act))
{
继续;//不要完成这个。
}
ref.get().finish();
}
}
activity_stack.clear();//但清除所有活动引用
}
现在,当您需要完成所有活动时,只要调用
Constants.killAllExcept(null)
Constants.killAllExcept(this)
就可以了


如果您想保留一个活动,而其他活动/如果您愿意,您可以将其全部完成,则此方法非常方便。

应该强调的是,建议的常量.killAll()方法设计不好,如果使用不当,将导致内存泄漏。在Android中,保存对活动的静态引用是导致内存泄漏的最常见原因


希望这有帮助。

thanq对于您的回答,我想在单击“否”按钮时关闭整个应用程序。请查看此链接,它正在工作,但当我打开应用程序时,应用程序将显示最后一个活动,即我退出应用程序的位置。以下是关闭所有活动的最佳解决方案: