編輯:關於Android編程
本文實例講述了Android一次性退出多個Activity的方法。分享給大家供大家參考,具體如下:
因為android的API中沒有提供一次性退出的接口所以想要在多activity的程序裡面一次性退出的話就要費點功夫了。我是在一個單例對象裡面記錄activity棧中activity的引用然後在需要退出時遍歷一遍finish()掉就可以了。實現步驟如下:
1、創建一個單例對象
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,用於記錄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
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、以後創建的activity都繼承這個根activity就可以了,如下
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(); } } }
更多關於Android相關內容感興趣的讀者可查看本站專題:《Android開發入門與進階教程》、《Android多媒體操作技巧匯總(音頻,視頻,錄音等)》、《Android基本組件用法總結》、《Android視圖View技巧總結》、《Android布局layout技巧總結》及《Android控件用法總結》
希望本文所述對大家Android程序設計有所幫助。
在編程中經常會遇到數據庫的操作,而Android系統內置了SQLite,它是一款輕型數據庫,遵守事務ACID的關系型數據庫管理系統,它占用的資源非常低,能夠支持Windo
之前幫別人寫了一個不是那麼優美的圓形進度條,效果圖大家也看過了。但是後某人不滿意,說原應用是倒計時時間最後5s,才開始顯示數字的,同時轉完一圈需要的時間只能是30s左右。
1:登陸到聊天界面去。這裡我用對方發來的qq表情位例子。按住你所想要收藏的地方。就會自己出現了收藏選擇。2:然後回到主頁面,點擊右下角的"我&qu
Android SpannableString設置超鏈接、顏色、字體等屬性在Android中,TextView是我們最常用的用來顯示文本的控件。 一般情況下,