怎样管理当前的执行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

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

 

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

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

    用一个集合类对所有的Activity进行管理,实现随时控制Activity.用add(Activity activity)方法向List中添加Activity,用remove(Activity act ...

  2. 我的Android进阶之旅------>关于android:layout_weight属性的详细解析

    关于androidlayout_weight属性的详细解析 效果一 效果二 图3的布局代码 图4的布局代码 效果三 图7代码 图8代码 效果四 效果五 版权声明:本文为[欧阳鹏]原创文章,欢迎转载,转 ...

  3. 我的Android进阶之旅------>关于android:layout_weight属性的一个面试题

    最近碰到一个面试题,按照下图,由Button和EditText组成的界面下厨布局代码,解决这题目需要使用android:layout_weight的知识. 首先分析上图所示的界面可以看成一下3个部分. ...

  4. 我的Android进阶之旅------&gt; Android在TextView中显示图片方法

    面试题:请说出Android SDK支持哪些方式显示富文本信息(不同颜色.大小.并包括图像的文本信息).并简要说明实现方法. 答案:Android SDK支持例如以下显示富文本信息的方式. 1.使用T ...

  5. 我的Android进阶之旅------&gt;Android字符串资源中的单引號问题error: Apostrophe not preceded by 的解决的方法

    刚刚在string字符串资源文件里,写了一个单引號.报错了,错误代码例如以下 error: Apostrophe not preceded by \ (in OuyangPeng's blog ) 资 ...

  6. 我的Android进阶之旅------&gt; Android为TextView组件中显示的文本加入背景色

    通过上一篇文章 我的Android进阶之旅------> Android在TextView中显示图片方法 (地址:http://blog.csdn.net/ouyang_peng/article ...

  7. 我的Android进阶之旅------&gt;怎样将Activity变为半透明的对话框?

    我的Android进阶之旅------>怎样将Activity变为半透明的对话框?能够从两个方面来考虑:对话框和半透明. 在定义Activity时指定Theme.Dialog主题就能够将Acti ...

  8. 我的Android进阶之旅------&gt;Android系统设置默认来电铃声、闹钟铃声、通知铃声

    首先了解Android系统本身提供的默认铃声文件,这些文件都放在  /system/media/audio  文件夹下. /system/media/audio/ringtones   系统来电铃声 ...

  9. 【我的Android进阶之旅】Android 混淆文件资源分类整理

    之前将所有的混淆都配置在一个 proguard-rules.pro 这个Android Studio新建项目时自动生成的文件里面,而随着项目功能迭代越来越多,代码量越来越多,引用的第二方库.第三方库都 ...

随机推荐

  1. Linux限制某些用户或IP登录SSH、允许特定IP登录SSH

    说明:一般要实现这种功能时,先安装VPN,然后客户端登录VPN,然后通过内网IP登录SSH. 搭建OpenVPN: 参考:http://www.cnblogs.com/EasonJim/p/83338 ...

  2. Nginx 重定向 伪静态 rewrite index.php

    参考https://www.kancloud.cn/manual/thinkphp5/177576 thinkphp入口文件同目录下添加.把下面的内容保存为.htaccess文件 <IfModu ...

  3. pcap报文格式

    pcap报文格式 pcap报文整体格式 pcap 报文头格式 pcap报文格式,黄色部分为报文头 pcapng报文格式 PCAPNG: PCAP Next Generation Dump File F ...

  4. 【java】LIst切割----划分 List为几个LIst的几种工具类 1.按照目标份数划分 2.按照目标容量划分 【适用场景:mybatis分批次In查询,放置In拼接sql过长】

    如题,示例代码如下: /** * 1> 按照份数---划分list * @param source * @param num 想要划分成多少份 * @return */ public stati ...

  5. Netty游戏服务器二

    上节我们写个server主类,那么发现什么事情都干不了,是的,我们还没有做任何的业务处理. 接着我们开始写处理客户端连接,发送接收数据的类ServerHandler. public class Ser ...

  6. 基于CSRF的XSS攻击

    有些XSS不好利用啊,比如有些后台的XSS漏洞,你进不了别人的后台,怎么能 利用他的XSS漏洞呢?进得了别人的后台,还利用这个XSS漏洞干什么?其实这个时候可以种个后门(如果那是个持久型的XSS,这是 ...

  7. 【云计算】使用nsenter进入Docker容器进行调试

    [nsenter安装使用] cd /tmp curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.t ...

  8. Ubuntu切换root用户权限

    其实方法很简单,就是需要选对自己使用的linux系统,不同分支的系统切换root的方法不一定一样. Ubuntu切换root的方法很简单,首先一档钱管理员命令执行: sudo passwd root ...

  9. 无废话MVC入门教程一[概述、环境安装、创建项目]

    (转载) 本文目标 1.对MVC有初步的了解 2.能够在VS2010的基础之上安装MVC3的开发和运行环境 3.对MVC框架有概括性的认识 本文目录 1.什么是MVC 2.VS2010安装MVC3 3 ...

  10. 【转载】Android控件属性大全

    控件属性: android属性 Android功能强大,界面华丽,但是众多的布局属性就害苦了开发者,下面这篇文章结合了网上不少资料, 第一类:属性值为true或falseandroid:layout_ ...