我的Android进阶之旅------>Android关于Activity管理的一个简单封装
来源:互联网 发布:mac如何删除u盘文件 编辑:程序博客网 时间:2024/06/04 19:22
如何管理当前的运行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.csdn.net/ouyang_peng
====================================================================================
1 0
- 我的Android进阶之旅------>Android关于Activity管理的一个简单封装
- 我的Android进阶之旅------>Android关于Activity管理的一个简单封装
- 我的Android进阶之旅------>Android关于Log的一个简单封装
- 我的Android进阶之旅------>关于android:layout_weight属性的一个面试题
- Android关于Log的一个简单封装
- 我的Android进阶之旅------>Android关于HttpsURLConnection一个忽略Https证书是否正确的Https请求工具类
- 我的Android进阶之旅------>启动Activity的标准Action和标准Category
- 我的Android进阶之旅------>如何将Activity变为半透明的对话框?
- 我的Android进阶之旅---Activity不同启动模式下应用程序栈的变化
- Android简单封装带TopBar的Activity
- 我的Android进阶之旅------>Android关于ImageSpan和SpannableString的初步了解
- 我的Android进阶之旅------>Android关于TextWatcher的初步了解
- 我的Android进阶之旅------>Android关于dp(dip)、sp转px的工具类
- 我的Android进阶之旅------>关于android:layout_weight属性的详细解析
- 【Android 进阶】Activity 、Fragment 和 Presenter 的高层封装
- 我的Android进阶之旅------>Android Activity的singleTask加载模式和onActivityResult方法之间的冲突
- 我的Android进阶之旅------>android:drawableLeft的用法
- 我的Android进阶之旅------>自己写个Activity来调节Android系统背光亮度Brightness
- codeforce 315B Sereja and Array 【水题,封顶距离统计 OR 线段树延迟更新】
- MOOC网上调研以及个人见解
- java集群优化——Nginx+tomcat集群配置-理论篇
- 【asp】win7 ODBC sqlserver数据源的配置
- DBUtils使用详解二
- 我的Android进阶之旅------>Android关于Activity管理的一个简单封装
- 第五章 并发性:互斥和同步
- Quick-Cocos2d-x初学者游戏教程(二)
- Codeforces Round #286 (Div. 2) B. Mr. Kitayuta's Colorful Graph dfs
- spring aop 引用传值时,引用参数不会被改变
- Quick-Cocos2d-x初学者游戏教程(三)
- mysql中SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
- service XXX does not support chkconfig
- Quick-Cocos2d-x初学者游戏教程(四)