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

时间:2012-02-24 06:23:24

标签: android dialog

当我点击Dialog中的“NO”按钮时,我想在android中关闭整个应用程序。我使用了以下代码。

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();
    }

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

5 个答案:

答案 0 :(得分:8)

让我们稍微简单一点。假设您有一个类Constants.java,您可以在其中放置应用程序的所有重用常量。在此声明一个活动堆栈如下:

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);

}

每当你创建一些活动时,在最后一行的onCreate中你会输入如下内容:

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
}

现在,当您需要完成所有活动时,如果您想保留此活动,请致电Constants.killAllExcept(null)Constants.killAllExcept(this)

如果你想保留一项活动,这种方法很方便,但是如果你想要,你可以完成所有这些活动。

答案 1 :(得分:5)

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

private void endApplication() {
    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.addCategory(Intent.CATEGORY_HOME);
    startActivity(intent);
}

答案 2 :(得分:1)

你应该杀死你的应用程序。您应该让ActivityManager处理它。

具体来说,如果您希望用户离开您的应用程序,请通过Intent将它们发送到主屏幕。

答案 3 :(得分:0)

你不应该自己致电onDestroy()而是致电finish()来关闭活动..

自己调用Activity生命周期方法是不好的做法(不知道是否可能)。它们由Android OS本身处理..

答案 4 :(得分:0)

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

希望这有帮助。