2012-02-24 146 views
0

我想在Android中关闭总体应用程序时,我点击对话框中的“否”按钮。我已经使用了下面的代码。如何杀死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(); 
    } 

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

+0

这里是关闭所有活动的最佳解决方案: http://stackoverflow.com/a/5453228/1464582 – 2013-02-03 08:39:50

回答

5

您可以通过编程调用finish()方法上的活动,并呼吁主屏幕(模拟为homeButton)是这样的:

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

其工作,但是当我打开应用程序应用程序将显示最后一个活动,即,我从应用程序退出的位置。 – NareshRavva 2012-02-24 10:24:53

0

你should't调用onDestroy()自己..改为调用finish()关闭活动..

自行调用活动的生命周期方法是不好的做法(不知道如果可能的话)。他们是由Android操作系统本身来处理..

+0

thanq您的回复,我想关闭整个应用程序,当我在“否”按钮点击 – NareshRavva 2012-02-24 06:27:26

+0

看到这个链接http://www.google.co.in/#hl=en&gs_nf=1&cp=31&gs_id=3w&xhr=t&q=how+to+close+whole+application&pf=p&sclient=psy-ab&pbx=1&oq=how+to +接近+整个+申请+水溶液= F&AQI =&AQL =&gs_sm =&gs_upl =&BAV = on.2,or.r_gc.r_pw.r_qf。,cf.osb&FP = 70e2b85fee382b45&BIW = 1280&波黑= 933 – ngesh 2012-02-24 06:28:29

1

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

特别是如果你希望用户离开你的应用程序,然后送他们回家通过意向主屏幕。

8

让simply.Suppose你有一个类Constants.java,你把所有的做到这一点有点您的重用application.In的常量声明的活动堆栈是这样的:

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)如果你想保留本次活动。如果你想保持一个活动,但其他的/如果你愿意,你可以完成这些工作全部

这种方法很方便。

0

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

希望这会有所帮助。

相关问题