[英]how to kill all activities in android application?
我想在对话框中单击“否”按钮时关闭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();
}
请任何人告诉我如何解决这个问题。
让我们简单地做一件事,假设您有一个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)
。
当您要保留一项活动,而其他活动/您可以完成所有活动时,此方法很方便。
您可以在活动中调用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);
}
您不应该终止您的应用程序。 您应该让ActivityManager处理该问题。
具体来说,如果您希望用户离开您的应用程序,则通过Intent将其发送到主屏幕。
应该强调的是,建议的Constants.killAll()方法设计不好,如果使用不正确,将导致内存泄漏。 保留对活动的静态引用是Android中内存泄漏的最常见原因。
希望这可以帮助。
您不应该自己调用onDestroy()
。而是调用finish()
关闭Activity。
自己调用Activity生命周期方法是一种不好的做法(不知道是否可能)。 它们由Android OS本身处理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.