1. Dalvik VM的本地方法
//殺死進程
android.os.Process.killProcess(android.os.Process.myPid())
//拋異常強制退出
System.exit(0);
2.任務管理器方法
//通過activity管理器重啓
ActivityManager activitymanager= (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);
activitymanager.restartPackage(getPackageName());
注意:需要註冊的權限<uses-permission android:name=\"android.permission.RESTART_PACKAGES\"></uses- permission>
3.通過封裝到棧裏一一結束
//封裝界面的容器
List<Activity> activitylist=new LinkedList<Activity>();
//定義我的應用
public static MyApplication instance;
/*實例化我的應用的方法
* 如果我的應用爲空的話
* 實例化我的應用
*/
public MyApplication getInstance(){
if(null==instance){
instance=new MyApplication();
}
return instance;
}
/*添加界面的方法
* 直接調用界面添加
*/
public void addActivity(Activity activity){
activitylist.add(activity);
}
/*完全退出我的應用
* 結束每一個界面
* 拋異常強制退出
*/
public void exit(){
for(Activity activity :activitylist){
activity.finish();
}
System.exit(0);
}
4. 根據Activity的聲明週期
我們知道Android的窗口類提供了歷史棧,我們可以通過stack的原理來巧妙的實現,這裏我們在A窗口打開B 窗口時在Intent中直接加入標誌 Intent.FLAG_ACTIVITY_CLEAR_TOP,這樣開啓B時將會清除該進程空間的所有Activity。
在A窗口中使用下面的代碼調用B窗口
Intent intent = new Intent();
intent.setClass(MainActivity.this, SecondActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //注意本行的FLAG設置
startActivity(intent);
5.自定義一個Actiivty 棧
通過利用一個單例模式的Activity棧來管理所有Activity。並提供退出所有Activity的方法。代碼如下:
public class ScreenManager {
private static Stack<Activity> activityStack;
private static ScreenManager instance;
private ScreenManager(){
}
public static ScreenManager getScreenManager(){
if(instance==null){
instance=new ScreenManager();
}
return instance;
}
//退出棧頂Activity
public void popActivity(Activity activity){
if(activity!=null){
activity.finish();
activityStack.remove(activity);
activity=null;
}
}
//獲得當前棧頂Activity
public Activity currentActivity(){
Activity activity=activityStack.lastElement();
return activity;
}
//將當前Activity推入棧中
public void pushActivity(Activity activity){
if(activityStack==null){
activityStack=new Stack<Activity>();
}
activityStack.add(activity);
}
//退出棧中所有Activity
public void popAllActivityExceptOne(Class cls){
while(true){
Activity activity=currentActivity();
if(activity==null){
break;
}
if(activity.getClass().equals(cls) ){
break;
}
popActivity(activity);
}
}
}
6.通過封裝超類管裏棧繼承實現
1.
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,用於記錄activity棧,方便退出程序(這裏爲了不影響系統回收activity,所以用軟引用) */ private final HashMap<String, SoftReference<Activity>> taskMap = new HashMap<String, SoftReference<Activity>>(); /** * 往應用task map加入activity */ public final void putActivity(Activity atv) { taskMap.put(atv.toString(), new SoftReference<Activity>(atv)); } /** * 往應用task map加入activity */ public final void removeActivity(Activity atv) { taskMap.remove(atv.toString()); } /** * 清除應用的task棧,如果程序正常運行這會導致應用退回到桌面 */ 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、創建自己的根activity,重寫onCreate與onDestory
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、以後創建的activity都繼承這個根activity就可以了,如下:
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(); } } }
轉載地:http://www.eoeandroid.com/thread-311977-1-1.html