我的Android进阶之旅------>Android关于Activity管理的一个简单封装

时间:2023-03-09 05:55:37
我的Android进阶之旅------>Android关于Activity管理的一个简单封装

怎样管理当前的执行Activity栈,怎样彻底退出程序。本文封装了一个Activity管理类,能够方便随时退出程序。

import java.util.Stack;

import android.app.Activity;
import android.content.Context; public class ActivityManager {
private static Stack<Activity> activityStack;
private static ActivityManager instance;
static {
instance = new ActivityManager();
} public static ActivityManager getInstance() {
return instance;
} /**
* 加入指定Activity到堆栈
*/
public void addActivity(Activity activity){
if(activityStack==null){
activityStack=new Stack<Activity>();
}
activityStack.add(activity);
}
/**
* 获取当前Activity
*/
public Activity currentActivity(){
Activity activity=activityStack.lastElement();
return activity;
}
/**
* 结束当前Activity
*/
public void finishActivity(){
Activity activity=activityStack.lastElement();
finishActivity(activity);
}
/**
* 结束指定的Activity
*/
public void finishActivity(Activity activity){
if(activity!=null){
activityStack.remove(activity);
activity.finish();
activity=null;
}
}
/**
* 结束指定Class的Activity
*/
public void finishActivity(Class<?> cls){
for (Activity activity : activityStack) {
if(activity.getClass().equals(cls) ){
finishActivity(activity);
return;
}
}
} /**
* 结束所有的Activity
*/
public void finishAllActivity(){
for (int i = 0, size = activityStack.size(); i < size; i++){
if (null != activityStack.get(i)){
activityStack.get(i).finish();
}
}
activityStack.clear();
}
/**
* 退出应用程序
*/
public void AppExit(Context context) {
try {
finishAllActivity();
android.app.ActivityManager activityMgr= (android.app.ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
activityMgr.restartPackage(context.getPackageName());
System.exit(0);
} catch (Exception e) { }
}
}

==================================================================================================

以下从http://www.oschina.net/code/snippet_191986_11730中取来一段代码,封装了Activity全屏、隐藏系统标题栏、设置屏幕方向、Activity跳转等功能。代码例如以下:

import java.util.Map;

import org.apache.http.NameValuePair;

import android.app.Activity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast; /**
* </br><b>name : </b> ActivityUtil
* </br><b>description :</b>Activity特性辅助工具
* </br>@author : 桥下一粒砂
* </br><b>e-mail : </b> chenyoca@gmail.com
* </br><b>weibo : </b> @桥下一粒砂
* </br><b>date : </b> 2012-7-8
*
*/
public class ActivityUtil { /**
* </br><b>title : </b> 设置Activity全屏显示
* </br><b>description :</b>设置Activity全屏显示。 * @param activity Activity引用
* @param isFull true为全屏,false为非全屏
*/
public static void setFullScreen(Activity activity,boolean isFull){
Window window = activity.getWindow();
WindowManager.LayoutParams params = window.getAttributes();
if (isFull) {
params.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
window.setAttributes(params);
window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
} else {
params.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);
window.setAttributes(params);
window.clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
} /**
* </br><b>title : </b> 隐藏系统标题栏
* </br><b>description :</b>隐藏Activity的系统默认标题栏
* @param activity Activity对象
*/
public static void hideTitleBar(Activity activity){
activity.requestWindowFeature(Window.FEATURE_NO_TITLE);
} /**
* </br><b>title : </b> 设置Activity的显示方向为垂直方向
* </br><b>description :</b>强制设置Actiity的显示方向为垂直方向。 * @param activity Activity对象
*/
public static void setScreenVertical(Activity activity){
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} /**
* </br><b>title : </b> 设置Activity的显示方向为横向
* </br><b>description :</b>强制设置Actiity的显示方向为横向。
* @param activity Activity对象
*/
public static void setScreenHorizontal(Activity activity){
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} /**
* </br><b>title : </b> 隐藏软件输入法
* </br><b>description :</b>隐藏软件输入法
* </br><b>time :</b> 2012-7-12 下午7:20:00
* @param activity
*/
public static void hideSoftInput(Activity activity){
activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
} /**
* </br><b>title : </b> 使UI适配输入法
* </br><b>description :</b>使UI适配输入法
* </br><b>time :</b> 2012-7-17 下午10:21:26
* @param activity
*/
public static void adjustSoftInput(Activity activity) {
activity.getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
} /**
* </br><b>title : </b> 跳转到某个Activity。
* </br><b>description :</b>跳转到某个Activity
* </br><b>time :</b> 2012-7-8 下午3:20:00
* @param activity 本Activity
* @param targetActivity 目标Activity的Class
*/
public static void switchTo(Activity activity,Class<? extends Activity> targetActivity){
switchTo(activity, new Intent(activity,targetActivity));
} /**
* </br><b>title : </b> 依据给定的Intent进行Activity跳转
* </br><b>description :</b>依据给定的Intent进行Activity跳转
* </br><b>time :</b> 2012-7-8 下午3:22:23
* @param activity Activity对象
* @param intent 要传递的Intent对象
*/
public static void switchTo(Activity activity,Intent intent){
activity.startActivity(intent);
} /**
* </br><b>title : </b> 带參数进行Activity跳转
* </br><b>description :</b>带參数进行Activity跳转
* </br><b>time :</b> 2012-7-8 下午3:24:54
* @param activity Activity对象
* @param targetActivity 目标Activity的Class
* @param params 跳转所带的參数
*/
public static void switchTo(Activity activity,Class<? extends Activity> targetActivity,Map<String,Object> params){
if( null != params ){
Intent intent = new Intent(activity,targetActivity);
for(Map.Entry<String, Object> entry : params.entrySet()){
setValueToIntent(intent, entry.getKey(), entry.getValue());
}
switchTo(activity, intent);
}
} /**
* </br><b>title : </b> 带參数进行Activity跳转
* </br><b>description :</b>带參数进行Activity跳转
* </br><b>time :</b> 2012-7-17 下午10:22:58
* @param activity
* @param target
* @param params
*/
public static void switchTo(Activity activity,Class<? extends Activity> target,NameValuePair...params){
if( null != params ){
Intent intent = new Intent(activity,target);
for(NameValuePair param : params){
setValueToIntent(intent, param.getName(), param.getValue());
}
switchTo(activity, intent);
}
} /**
* </br><b>title : </b> 显示Toast消息。
* </br><b>description :</b>显示Toast消息,并保证执行在UI线程中
* </br><b>time :</b> 2012-7-10 下午08:36:02
* @param activity
* @param message
*/
public static void toastShow(final Activity activity,final String message){
activity.runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(activity, message, Toast.LENGTH_SHORT).show();
}
});
} /**
* </br><b>title : </b> 将值设置到Intent里
* </br><b>description :</b>将值设置到Intent里
* </br><b>time :</b> 2012-7-8 下午3:31:17
* @param intent Inent对象
* @param key Key
* @param val Value
*/
public static void setValueToIntent(Intent intent, String key, Object val) {
if (val instanceof Boolean)
intent.putExtra(key, (Boolean) val);
else if (val instanceof Boolean[])
intent.putExtra(key, (Boolean[]) val);
else if (val instanceof String)
intent.putExtra(key, (String) val);
else if (val instanceof String[])
intent.putExtra(key, (String[]) val);
else if (val instanceof Integer)
intent.putExtra(key, (Integer) val);
else if (val instanceof Integer[])
intent.putExtra(key, (Integer[]) val);
else if (val instanceof Long)
intent.putExtra(key, (Long) val);
else if (val instanceof Long[])
intent.putExtra(key, (Long[]) val);
else if (val instanceof Double)
intent.putExtra(key, (Double) val);
else if (val instanceof Double[])
intent.putExtra(key, (Double[]) val);
else if (val instanceof Float)
intent.putExtra(key, (Float) val);
else if (val instanceof Float[])
intent.putExtra(key, (Float[]) val);
} }


                            ====================================================================================

  作者:欧阳鹏  欢迎转载。与人分享是进步的源泉!

  转载请保留原文地址:http://blog.****.net/ouyang_peng

====================================================================================

我的Android进阶之旅------&gt;Android关于Activity管理的一个简单封装