一个Activity的管理方法,实现Activity栈的管理,采用策略模式。
————————————————————————————————————————
首先定义Activity的父类
public abstract class ActivityStack {
protected final static String KEY_ACTIVITY_NAME = "ActivityName";
protected final static String KEY_ACTIVITY_OBJECT = "ActivityObject";
public abstract void addActivity(Activity mActivity, String mActivityName);
public abstract String getLastActivityName();
public abstract void deleteLastActivity();
}
——————————————————————————————————————————————————————————————
其次,子类继承该类,并实现抽象方法和进行扩展,想到聚集使用上的性能等问题,建议将此类的ArrayList修改为List.
public class ActivityRecord extends ActivityStack{
private static ActivityRecord instance;
private static ArrayList<HashMap<String, Object>> activityInfoList;
IActivityRecordCallbackListener activityRecordCallback;
public interface IActivityRecordCallbackListener {
public void onCallActivityEmpty();
public void onAddFirstActivity();
}
public void setRecordCallback(IActivityRecordCallbackListener activityRecordCallback)
{
this.activityRecordCallback = activityRecordCallback;
}
public static ActivityRecord getInstance(){
if (instance == null){
synchronized(ActivityRecord.class){
if (instance == null){
instance = new ActivityRecord();
}
}
}
return instance;
}
private ActivityRecord(){
activityInfoList = new ArrayList<HashMap<String, Object>>();
}
@Override
public void addActivity(Activity mActivity, String mActivityName) {
if(activityInfoList.size() == 0) {
if(activityRecordCallback != null) {
activityRecordCallback.onAddFirstActivity();
}
}
HashMap<String, Object> map = new HashMap<String, Object>();
map.put(KEY_ACTIVITY_OBJECT, mActivity);
map.put(KEY_ACTIVITY_NAME, mActivityName);
activityInfoList.add(map);
}
@Override
public String getLastActivityName() {
if (activityInfoList.size() > 0) {
Map<String, Object> map = activityInfoList.get(activityInfoList
.size() - 1);
return (String) map.get(KEY_ACTIVITY_NAME);
} else {
return "";
}
}
public Activity getLastActivity() {
if (activityInfoList.size() > 0) {
Map<String, Object> map = activityInfoList.get(activityInfoList
.size() - 1);
Activity act = (Activity) map.get(KEY_ACTIVITY_OBJECT);
return act;
} else {
return null;
}
}
@Override
public void deleteLastActivity() {
if (activityInfoList.size() > 0) {
activityInfoList.remove(activityInfoList.size()-1);
}
}
public void exitAllActivity() {
Map<String, Object> map;
for (int i = 0; i < activityInfoList.size(); i++) {
map = activityInfoList.get(i);
Activity act = (Activity) map.get(KEY_ACTIVITY_OBJECT);
act.finish();
}
activityInfoList.clear();
callActivityEmpty();
}
private void callActivityEmpty() {
if (activityRecordCallback != null) {
activityRecordCallback.onCallActivityEmpty();
}
}
public void deleteActivity(String actName) {
Map<String, Object> map;
for (int i = 0; i < activityInfoList.size(); i++) {
map = activityInfoList.get(i);
String actNameInList = (String) map.get(KEY_ACTIVITY_NAME);
if (actName.equals(actNameInList)) {
activityInfoList.remove(i);
break;
}
}
if(activityInfoList.size() == 0)
{
callActivityEmpty();
}
}
}
——————————————————————————————————————————————————————————————
上述类中的IOnActivityInstanceListener 接口用于获取Activity的实例。
public interface IOnActivityInstanceListener {
public Object onObtainActivityInstance();
}
——————————————————————————————————————————————————————————————
这个Activity的管理结合Application使用,主要是在Application中操作Activity,一般会获取Activity,具体如下面的代码。
public abstract class BaseApplication extends Application implements ActivityRecord.IActivityRecordCallbackListener {
private ActivityRecord mActivityRecord;
/**
* 打印日志总开关
*/
protected static Boolean isSwitchLog = false;
public void setIsSwitchLog(Boolean arg0){
isSwitchLog = arg0;
}
public static void Application_Log_D(String tag, String msg)
{
if (isSwitchLog) {
Log.d(tag, msg);
}
}
public static void Application_Log_E(String tag, String msg)
{
if (isSwitchLog) {
Log.e(tag, msg);
}
}
public static void Application_Log_I(String tag, String msg)
{
if (isSwitchLog) {
Log.i(tag, msg);
}
}
public static void Application_Log_V(String tag, String msg)
{
if (isSwitchLog) {
Log.v(tag, msg);
}
}
public void Application_Log_D(String msg)
{
if (isSwitchLog) {
Log.d(getClass().getCanonicalName(), msg);
}
}
@Override
public void onCreate() {
Application_Log_E(getClass().getCanonicalName(), "Oncreate");
obtainApplicationInstance();
initMemberData();
initInterfaceListener();
super.onCreate();
}
protected void initMemberData()
{
mActivityRecord = ActivityRecord.getInstance();
}
protected void initInterfaceListener()
{
mActivityRecord.setRecordCallback(this);
}
protected void addActivity(Activity activity, String actName) {
mActivityRecord.addActivity(activity, actName);
}
protected void deleteActivity(String actName) {
mActivityRecord.deleteActivity(actName);
}
protected void deleteLastActivity() {
mActivityRecord.deleteLastActivity();
}
protected void exitAllActivity() {
mActivityRecord.exitAllActivity();
}
protected Activity getLastActivity() {
return mActivityRecord.getLastActivity();
}
protected String getLastActivityName() {
return mActivityRecord.getLastActivityName();
}
protected abstract void obtainApplicationInstance();
}
——————————————————————————————————————————————————
Application类:
public class Application extends BaseApplication{
private static Application mApplication ;
public static final int TOAST_MSG = -1;
public static final int TOAST_MSG_LONG = -2;
public static final String STRING_KEY = "string_key";
static ToastHandler toastHandler;
public static Application getInstance(){
return mApplication;
}
@Override
protected void obtainApplicationInstance() {
mApplication = this;
}
@Override
public void onCallActivityEmpty() {
}
@Override
public void onAddFirstActivity() {
}
@Override
public void setIsSwitchLog(Boolean arg0) {
super.setIsSwitchLog(arg0);
}
@Override
protected void initMemberData() {
super.initMemberData();
toastHandler = new ToastHandler();
}
/**
*
* @param id
* :R.string....
* @return
*/
public static String getAppString(int id) {
return mApplication.getResources().getString(id);
}
public static void showToastShort(String strContent) {
Message msg = toastHandler.obtainMessage();
msg.what = TOAST_MSG;
Bundle bundle = new Bundle();
bundle.putString(STRING_KEY, strContent);
msg.setData(bundle);
toastHandler.sendMessage(msg);
}
public static void showToastLong(String strContent) {
Message msg = toastHandler.obtainMessage();
msg.what = TOAST_MSG_LONG;
Bundle bundle = new Bundle();
bundle.putString(STRING_KEY, strContent);
msg.setData(bundle);
toastHandler.sendMessage(msg);
}
class ToastHandler extends Handler {
@Override
public void handleMessage(Message msg) {
if(msg.what == TOAST_MSG) {
Toast.makeText(mApplication, msg.getData().getString(STRING_KEY),
Toast.LENGTH_SHORT).show();
}
else if(msg.what == TOAST_MSG_LONG) {
Toast.makeText(mApplication, msg.getData().getString(STRING_KEY),
Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(mApplication, Application.getAppString(msg.what),
Toast.LENGTH_SHORT).show();
}
super.handleMessage(msg);
}
}
}
——————————————————————————————————————————————————————
Activity的父类
public abstract class ActivityBaseClass extends FragmentActivity implements IOnActivityInstanceListener{
@Override
protected void onDestroy() {
super.onDestroy();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initLayoutFromID();
initWidgetFromID();
initMemberData();
/*
* 压栈,管理activity活动栈
*/
Application.getInstance().deleteActivity(onObtainActivityInstance().getClass().getCanonicalName());
}
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onStart() {
super.onStart();
}
@Override
protected void onStop() {
super.onStop();
}
public abstract void initLayoutFromID();
public abstract void initWidgetFromID();
public void initMemberData(){
Application.getInstance().setIsSwitchLog(true);
}
}
————————————————————————————————————————————————————————————
————————————————————————————————————————
首先定义Activity的父类
public abstract class ActivityStack {
protected final static String KEY_ACTIVITY_NAME = "ActivityName";
protected final static String KEY_ACTIVITY_OBJECT = "ActivityObject";
public abstract void addActivity(Activity mActivity, String mActivityName);
public abstract String getLastActivityName();
public abstract void deleteLastActivity();
}
——————————————————————————————————————————————————————————————
其次,子类继承该类,并实现抽象方法和进行扩展,想到聚集使用上的性能等问题,建议将此类的ArrayList修改为List.
public class ActivityRecord extends ActivityStack{
private static ActivityRecord instance;
private static ArrayList<HashMap<String, Object>> activityInfoList;
IActivityRecordCallbackListener activityRecordCallback;
public interface IActivityRecordCallbackListener {
public void onCallActivityEmpty();
public void onAddFirstActivity();
}
public void setRecordCallback(IActivityRecordCallbackListener activityRecordCallback)
{
this.activityRecordCallback = activityRecordCallback;
}
public static ActivityRecord getInstance(){
if (instance == null){
synchronized(ActivityRecord.class){
if (instance == null){
instance = new ActivityRecord();
}
}
}
return instance;
}
private ActivityRecord(){
activityInfoList = new ArrayList<HashMap<String, Object>>();
}
@Override
public void addActivity(Activity mActivity, String mActivityName) {
if(activityInfoList.size() == 0) {
if(activityRecordCallback != null) {
activityRecordCallback.onAddFirstActivity();
}
}
HashMap<String, Object> map = new HashMap<String, Object>();
map.put(KEY_ACTIVITY_OBJECT, mActivity);
map.put(KEY_ACTIVITY_NAME, mActivityName);
activityInfoList.add(map);
}
@Override
public String getLastActivityName() {
if (activityInfoList.size() > 0) {
Map<String, Object> map = activityInfoList.get(activityInfoList
.size() - 1);
return (String) map.get(KEY_ACTIVITY_NAME);
} else {
return "";
}
}
public Activity getLastActivity() {
if (activityInfoList.size() > 0) {
Map<String, Object> map = activityInfoList.get(activityInfoList
.size() - 1);
Activity act = (Activity) map.get(KEY_ACTIVITY_OBJECT);
return act;
} else {
return null;
}
}
@Override
public void deleteLastActivity() {
if (activityInfoList.size() > 0) {
activityInfoList.remove(activityInfoList.size()-1);
}
}
public void exitAllActivity() {
Map<String, Object> map;
for (int i = 0; i < activityInfoList.size(); i++) {
map = activityInfoList.get(i);
Activity act = (Activity) map.get(KEY_ACTIVITY_OBJECT);
act.finish();
}
activityInfoList.clear();
callActivityEmpty();
}
private void callActivityEmpty() {
if (activityRecordCallback != null) {
activityRecordCallback.onCallActivityEmpty();
}
}
public void deleteActivity(String actName) {
Map<String, Object> map;
for (int i = 0; i < activityInfoList.size(); i++) {
map = activityInfoList.get(i);
String actNameInList = (String) map.get(KEY_ACTIVITY_NAME);
if (actName.equals(actNameInList)) {
activityInfoList.remove(i);
break;
}
}
if(activityInfoList.size() == 0)
{
callActivityEmpty();
}
}
}
——————————————————————————————————————————————————————————————
上述类中的IOnActivityInstanceListener 接口用于获取Activity的实例。
public interface IOnActivityInstanceListener {
public Object onObtainActivityInstance();
}
——————————————————————————————————————————————————————————————
这个Activity的管理结合Application使用,主要是在Application中操作Activity,一般会获取Activity,具体如下面的代码。
public abstract class BaseApplication extends Application implements ActivityRecord.IActivityRecordCallbackListener {
private ActivityRecord mActivityRecord;
/**
* 打印日志总开关
*/
protected static Boolean isSwitchLog = false;
public void setIsSwitchLog(Boolean arg0){
isSwitchLog = arg0;
}
public static void Application_Log_D(String tag, String msg)
{
if (isSwitchLog) {
Log.d(tag, msg);
}
}
public static void Application_Log_E(String tag, String msg)
{
if (isSwitchLog) {
Log.e(tag, msg);
}
}
public static void Application_Log_I(String tag, String msg)
{
if (isSwitchLog) {
Log.i(tag, msg);
}
}
public static void Application_Log_V(String tag, String msg)
{
if (isSwitchLog) {
Log.v(tag, msg);
}
}
public void Application_Log_D(String msg)
{
if (isSwitchLog) {
Log.d(getClass().getCanonicalName(), msg);
}
}
@Override
public void onCreate() {
Application_Log_E(getClass().getCanonicalName(), "Oncreate");
obtainApplicationInstance();
initMemberData();
initInterfaceListener();
super.onCreate();
}
protected void initMemberData()
{
mActivityRecord = ActivityRecord.getInstance();
}
protected void initInterfaceListener()
{
mActivityRecord.setRecordCallback(this);
}
protected void addActivity(Activity activity, String actName) {
mActivityRecord.addActivity(activity, actName);
}
protected void deleteActivity(String actName) {
mActivityRecord.deleteActivity(actName);
}
protected void deleteLastActivity() {
mActivityRecord.deleteLastActivity();
}
protected void exitAllActivity() {
mActivityRecord.exitAllActivity();
}
protected Activity getLastActivity() {
return mActivityRecord.getLastActivity();
}
protected String getLastActivityName() {
return mActivityRecord.getLastActivityName();
}
protected abstract void obtainApplicationInstance();
}
——————————————————————————————————————————————————
Application类:
public class Application extends BaseApplication{
private static Application mApplication ;
public static final int TOAST_MSG = -1;
public static final int TOAST_MSG_LONG = -2;
public static final String STRING_KEY = "string_key";
static ToastHandler toastHandler;
public static Application getInstance(){
return mApplication;
}
@Override
protected void obtainApplicationInstance() {
mApplication = this;
}
@Override
public void onCallActivityEmpty() {
}
@Override
public void onAddFirstActivity() {
}
@Override
public void setIsSwitchLog(Boolean arg0) {
super.setIsSwitchLog(arg0);
}
@Override
protected void initMemberData() {
super.initMemberData();
toastHandler = new ToastHandler();
}
/**
*
* @param id
* :R.string....
* @return
*/
public static String getAppString(int id) {
return mApplication.getResources().getString(id);
}
public static void showToastShort(String strContent) {
Message msg = toastHandler.obtainMessage();
msg.what = TOAST_MSG;
Bundle bundle = new Bundle();
bundle.putString(STRING_KEY, strContent);
msg.setData(bundle);
toastHandler.sendMessage(msg);
}
public static void showToastLong(String strContent) {
Message msg = toastHandler.obtainMessage();
msg.what = TOAST_MSG_LONG;
Bundle bundle = new Bundle();
bundle.putString(STRING_KEY, strContent);
msg.setData(bundle);
toastHandler.sendMessage(msg);
}
class ToastHandler extends Handler {
@Override
public void handleMessage(Message msg) {
if(msg.what == TOAST_MSG) {
Toast.makeText(mApplication, msg.getData().getString(STRING_KEY),
Toast.LENGTH_SHORT).show();
}
else if(msg.what == TOAST_MSG_LONG) {
Toast.makeText(mApplication, msg.getData().getString(STRING_KEY),
Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(mApplication, Application.getAppString(msg.what),
Toast.LENGTH_SHORT).show();
}
super.handleMessage(msg);
}
}
}
——————————————————————————————————————————————————————
Activity的父类
public abstract class ActivityBaseClass extends FragmentActivity implements IOnActivityInstanceListener{
@Override
protected void onDestroy() {
super.onDestroy();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initLayoutFromID();
initWidgetFromID();
initMemberData();
/*
* 压栈,管理activity活动栈
*/
Application.getInstance().deleteActivity(onObtainActivityInstance().getClass().getCanonicalName());
}
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onStart() {
super.onStart();
}
@Override
protected void onStop() {
super.onStop();
}
public abstract void initLayoutFromID();
public abstract void initWidgetFromID();
public void initMemberData(){
Application.getInstance().setIsSwitchLog(true);
}
}
————————————————————————————————————————————————————————————