当前位置: 代码迷 >> Android >> 小弟我的Android进阶之旅->Android关于Activity管理的一个简单封装
  详细解决方案

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

热度:81   发布时间:2016-04-27 23:44:03.0
我的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>  [email protected] * </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

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


版权声明:本文为博主原创文章,欢迎转载,转载请注明出处http://blog.csdn.net/ouyang_peng

  相关解决方案