編輯:關於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數據庫之增刪改查基礎操作
在編程中經常會遇到數據庫的操作,而Android系統內置了SQLite,它是一款輕型數據庫,遵守事務ACID的關系型數據庫管理系統,它占用的資源非常低,能夠支持Windo
一個不是那麼優美的圓形進度條續(基本還原原應用裡面的效果)
之前幫別人寫了一個不是那麼優美的圓形進度條,效果圖大家也看過了。但是後某人不滿意,說原應用是倒計時時間最後5s,才開始顯示數字的,同時轉完一圈需要的時間只能是30s左右。
手機QQ2015收藏的內容怎麼轉發給別人
1:登陸到聊天界面去。這裡我用對方發來的qq表情位例子。按住你所想要收藏的地方。就會自己出現了收藏選擇。2:然後回到主頁面,點擊右下角的"我&qu
Android SpannableString設置超鏈接、顏色、字體等屬性
Android SpannableString設置超鏈接、顏色、字體等屬性在Android中,TextView是我們最常用的用來顯示文本的控件。 一般情況下,