`

基类处理

 
阅读更多

1、安全退出已调用多个Activity的Application

对于单一Activity的应用来说,退出很简单,直接finish()即可。
当然,也可以用killProcess()和System.exit()这样的方法。
但是,对于多Activity的应用来说,在打开多个Activity后,如果想在最后打开的Activity直接退出,上边的方法都是没有用的,因为上边的方法都是结束一个Activity而已。
当然,网上也有人说可以。
就好像有人问,在应用里如何捕获Home键,有人就会说用keyCode比较KEYCODE_HOME即可,而事实上如果不修改framework,根本不可能做到这一点一样。
所以,最好还是自己亲自试一下。
那么,有没有办法直接退出整个应用呢?
在2.1之前,可以使用ActivityManager的restartPackage方法。
它可以直接结束整个应用。在使用时需要权限android.permission.RESTART_PACKAGES。
注意不要被它的名字迷惑。

可是,在2.2,这个方法失效了。
在2.2添加了一个新的方法,killBackgroundProcesses(),需要权限 android.permission.KILL_BACKGROUND_PROCESSES。
可惜的是,它和2.2的restartPackage一样,根本起不到应有的效果。

另外还有一个方法,就是系统自带的应用程序管理里,强制结束程序的方法,forceStopPackage()。
它需要权限android.permission.FORCE_STOP_PACKAGES。
并且需要添加android:sharedUserId="android.uid.system"属性
同样可惜的是,该方法是非公开的,他只能运行在系统进程,第三方程序无法调用。
因为需要在Android.mk中添加LOCAL_CERTIFICATE := platform。
而Android.mk是用于在Android源码下编译程序用的。

从以上可以看出,在2.2,没有办法直接结束一个应用,而只能用自己的办法间接办到。

现提供几个方法,供参考:

1、抛异常强制退出:
该方法通过抛异常,使程序Force Close。
验证可以,但是,需要解决的问题是,如何使程序结束掉,而不弹出Force Close的窗口。

2、记录打开的Activity:
每打开一个Activity,就记录下来。在需要退出时,关闭每一个Activity即可。

3、发送特定广播:
在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可。

4、递归退出
在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。

除了第一个,都是想办法把每一个Activity都结束掉,间接达到目的。
但是这样做同样不完美。
你会发现,如果自己的应用程序对每一个Activity都设置了nosensor,在两个Activity结束的间隙,sensor可能有效了。
但至少,我们的目的达到了,而且没有影响用户使用。
摘自:http://blog.csdn.net/debug2/archive/2011/02/18/6193644.aspx

分享到:
评论

相关推荐

    AJAX的基类

    AJAX的基类 可以直接使用这个基类处理AJAX的操作

    C# 数据库操作基类

    C# 数据库操作基类 包括存储过程和事务处理

    图像处理基类演示程序2

    增加了旋转和缩放的演示,实现的功能,全部可以在程序中调用。

    在ashx中验证是否登陆、是否有操作权限的基类

    在一般处理程序(ashx)中验证用户是否登陆、是否对当前操作有读、写、删、改权限的基类。在其他ashx中只需要继承相应权限的基类,无需另写代码实现。

    EF增删改查封装基类

    这是我写的Entityframework的增删该查封装基类,如果你要使用EF开发项目,只要把需要增删改查的类继承这个基类,就可以轻松做到。敬请参考,不到之处请多多指正。

    图像处理基类演示程序

    图像处理基类api已完成。为了演示该类的功能及处理效果,特制作了演示程序,演示几种通用颜色运算的实现效果。

    地图处理的基类

    对GIS的基本操作的基类,可用于继承,进行其他操作的多用途代码!

    C#常用基类库

    C#开发一些常用的处理类库,例如:验证码、图表、邮件、正则、导出功能、上传下载功能等

    VC 非窗口类定时器基类

    构建了一个基类,使其他继承该基类的非窗口类轻松使用定时器,使用SetMyTimer(id, uElapse)设置定时器, 使用KillMyTimer(id)销毁定时器, 重写虚函数OnMyTimer(id)来获取定时器消息并处理,目前只是简单的做了个...

    最好的java对象ToString处理方案,ToString基类

    每个项目我都必用的工具类,使用非常简单,放到项目目录中,java对象继承这个ToString类就可以,用在代码日志里特别方便,还支持过滤特定字段,满足日志保密性要求

    C#基类工具类

    C#基类工具类 ,提供IO流处理,正则处理,图片与文件上传下载, 报表生成,email发送,XML json 格式数据序列化等。

    易语言自绘基类

    易语言自绘基类源码,自绘基类,滑块条位置被改变,取类方法指针,取复制范围,RGB颜色透明,按钮被单击,创建,重画,鼠标被移动,鼠标左键被按下,鼠标左键被放开,消息处理,高级显示线程,创建控件,创建自窗口句柄,初始化,刷新...

    ViewBaseServlet代码模板,使用了thymeleaf视图模板技术,是处理视图模板文件的Servlet基类

    处理视图模板文件的servlet基类; 继承:HttpServlet类 重写了init()方法: 1.获取ServletContext对象 2.创建Thymeleaf解析器对象 3.给解析器对象设置参数(前缀、后缀、缓存过期时间、是否缓存、编码方式) 4....

    EF6基本操作基类

    EF6基本操作基类,封装了EntityFramework6.0对应的增删改查操作与事务处理,并扩展了对存储过程的支持。

    XML操作类XML操作类

    XML处理基类XML处理基类XML处理基类XML处理基类

    pixel-stream:图像像素数据的基本变换流类

    像素流 PixelStream是图像像素数据的基本变换流类。 它在管道流之间传播图像元数据,例如大小和颜色空间,并使处理多帧图像(例如动画 GIF!)变得更加容易。... PixelStream基类处理的另一个选项是colorSp

    C#基类库大全(包括网络操作,文件上传,图片处理,json解析,文件操作,数据库操作等)

    C#基类库大全(包括网络操作,文件上传,图片处理,json解析,文件操作,数据库操作等)

    SqlHelper基类.rar

    SqlHelper基类 /// /// 执行一条不返回结果的SqlCommand,通过一个已经存在的数据库事物处理 /// 使用参数数组提供参数 /// /// /// 使用示例: /// int result = ExecuteNonQuery(trans, CommandType....

    基类线程源代码

    这是一个最基本的线程基类,有线程同步,线程的处理函数可以指向任何的对象操作,很完整也很强大。是根据公司项目提起出来的。

Global site tag (gtag.js) - Google Analytics