安卓完全退出程序的六種方法(歡迎新手學習,大手指導)

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章