Transferred from: http://bbs.51cto.com/thread-970933-1.html
Because there is no one-time exit interface in the Android API, it will take some effort to get out of the multi-activity program at once. I was in a singleton object that records the activity reference in the activity stack and then iterates through the finish () when it needs to be exited. The implementation steps are as follows:
1. Create a Singleton object
Package com.exit;
Import java.lang.ref.SoftReference;
Import Java.util.HashMap;
Import Java.util.Iterator;
Import Java.util.Map.Entry;
Import android.app.Activity;
Import Android.content.Context;
Import android.content.Intent;
public class Activitymanager {
Private context context;
private static Activitymanager Activitymanager;
public static Activitymanager Getactivitymanager (context context) {
if (Activitymanager = = null) {
Activitymanager = new Activitymanager (context);
}
return activitymanager;
}
Private Activitymanager (context context) {
This.context = context;
}
/**
* Task map, used to record activity stack, easy to exit the program (here in order not to affect the system recycling activity, so with a soft reference)
*/
Private final hashmap<string, softreference<activity>> taskmap = new hashmap<string, softreference< Activity>> ();
/**
* Add activity to Application task map
*/
Public final void putactivity (Activity atv) {
Taskmap.put (Atv.tostring (), New softreference<activity> (ATV));
}
/**
* Add activity to Application task map
*/
Public final void removeactivity (Activity atv) {
Taskmap.remove (Atv.tostring ());
}
/**
* Clear the application's task stack, which will cause the app to bounce back to the desktop if the program works
*/
Public final void exit () {
For (iterator<entry<string, softreference<activity>>> Iterator = Taskmap.entryset (). Iterator (); Iterator.hasnext ();) {
softreference<activity> activityreference = Iterator.next (). GetValue ();
Activity activity = Activityreference.get ();
if (activity! = NULL) {
Activity.finish ();
}
}
Taskmap.clear ();
}
}
2. Create your own root activity, rewrite OnCreate and ondestory
Package com.exit;
Import android.app.Activity;
Import Android.os.Bundle;
public class Baseactivity extends Activity {
Private Activitymanager manager = Activitymanager.getactivitymanager (this);
@Override
protected void OnCreate (Bundle savedinstancestate) {
Super.oncreate (savedinstancestate);
Manager.putactivity (this);
}
@Override
protected void OnDestroy () {
Super.ondestroy ();
Manager.removeactivity (this);
}
public void exit () {
Manager.exit ();
}
}
3, after the creation of the activity will inherit the root activity can be, as follows:
Package com.exit.activitys;
Import android.content.Intent;
Import Android.os.Bundle;
Import Android.view.View;
Import Android.view.View.OnClickListener;
Import Android.widget.Button;
Import Android.widget.TextView;
Import com.exit.BaseActivity;
Import COM.EXIT.R;
public class Exitactivity extends baseactivity implements onclicklistener{
Private Button start;
Private Button exit;
Private TextView TIPTV;
@Override
public void OnCreate (Bundle savedinstancestate) {
Super.oncreate (savedinstancestate);
Setcontentview (R.layout.main);
Start = (Button) Findviewbyid (r.id.start_new_activity);
Exit = (Button) Findviewbyid (r.id.exit_all_activity);
TIPTV = (TextView) Findviewbyid (R.ID.TIP_TV);
Tiptv.settext ("Activity:" +this.tostring ());
Start.setonclicklistener (this);
Exit.setonclicklistener (this);
}
@Override
public void OnClick (View v) {
if (v = = start) {
Intent Intent = new Intent (this, exitactivity.class);
StartActivity (Intent);
}else if (v = = exit) {
Exit ();
}
}
}
And finally the layout file.
<?xml version= "1.0" encoding= "Utf-8"?>
<linearlayout xmlns:android= "Http://schemas.android.com/apk/res/android"
android:orientation= "Vertical"
Android:layout_width= "Fill_parent"
android:layout_height= "Fill_parent"
>
<textview
Android:id = "@+id/tip_tv"
Android:layout_width= "Fill_parent"
android:layout_height= "Wrap_content"
/>
<button android:text= "Start new Activity" android:id= "@+id/start_new_activity"
Android:layout_width= "Wrap_content" android:layout_height= "Wrap_content" ></Button>
<button android:text= "Disposable Exit" android:id= "@+id/exit_all_activity"
Android:layout_width= "Wrap_content" android:layout_height= "Wrap_content" ></Button>
</LinearLayout>
How Android exits all activity at once