zoukankan      html  css  js  c++  java
  • 我的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.csdn.net/ouyang_peng

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

     


  • 相关阅读:
    数字滤波器
    PCL点云库:Kd树
    KNN算法与Kd树
    分布式锁与实现(一)——基于Redis实现
    Redis分布式锁的正确实现方式
    redis常用命令大全
    使用 Redis 实现排行榜功能
    RabbitMQ下的生产消费者模式与订阅发布模式
    java高级精讲之高并发抢红包~揭开Redis分布式集群与Lua神秘面纱
    Java进阶面试题大集合-offer不再是问题
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6772778.html
Copyright © 2011-2022 走看看