Turn: http://bbs.51cto.com/thread-970933-1.html upload a tested Demo: allactivtyexit.rar
Because Android APIs do not provide a one-time exit interface, it takes a little effort to exit in a multi-activity program. I recorded the reference of the activity in the activity stack in a singleton object and traversed it once when I needed to exit. 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;
Private Static activitymanager;
Public static activitymanager getactivitymanager (context ){
If (activitymanager = NULL ){
Activitymanager = new activitymanager (context );
}
Return activitymanager;
}
Private activitymanager (context ){
This. Context = context;
}
/**
* Task map, used to record the activity stack and conveniently exit the program (here, we use soft reference to avoid affecting the system to recycle the activity)
*/
Private Final hashmap <string, softreference <activity> taskmap = new hashmap <string, softreference <activity> ();
/**
* Add an activity to the Application Task Map
*/
Public final void putactivity (activity ATV ){
Taskmap. Put (ATV. tostring (), new softreference <activity> (ATV ));
}
/**
* Add an activity to the Application Task Map
*/
Public final void removeactivity (activity ATV ){
Taskmap. Remove (ATV. tostring ());
}
/**
* Clear the task stack of the application. If the program runs normally, the application will be returned to the desktop.
*/
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 and 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. All activities created later can inherit the root activity, as shown below:
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 ();
}
}
}
Finally, layout files
<? 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 a new activity" Android: Id = "@ + ID/start_new_activity"
Android: layout_width = "wrap_content" Android: layout_height = "wrap_content"> </button>
<Button Android: text = "one-time exit" Android: Id = "@ + ID/exit_all_activity"
Android: layout_width = "wrap_content" Android: layout_height = "wrap_content"> </button>
</Linearlayout>