
Android本身是一个权限分立的 *** 作系统。在这类 *** 作系统中,每个应用都以唯一的一个系统识别身份运行(Linux用户ID与群组ID)。系统的各部分也分别使用各自独立的识别方式。Linux就是这样将应用与应用,应用与系统隔离开。
2.Android应用异常后会自动重启是Android应用异常后的安全警报!
所以你是用Android手机时偶尔会因为某些异常导致正在使用的应用出现异常并强制关闭并重启,
3,解决此类问题你需要捕获出现的异常并做处理。这些在你手机的设置中就可进行设置,主动权在你,在Java中有两类异常,分别是Error和RuntimeException,前者是不需要我们去处理的,我们处理的往往是后者。那么如何捕获线程在运行时的异常呢,我们可以使用自定义类实现
Thread.UncaughtExceptionHandler 接口并复写uncaughtException(Thread thread, Throwable ex)方法来实现对运行时线程进行异常处理。在Android中我们可以实现自己的Application类,然后实现 UncaughtExceptionHandler接口,并在uncaughtException方法中处理异常,这里我们关闭App并启动我们需要的Activity,下面看代码:
public class MyApplication extends Application implements
Thread.UncaughtExceptionHandler {
@Override
public void onCreate() {
super.onCreate()
//设置Thread Exception Handler
Thread.setDefaultUncaughtExceptionHandler(this)
}
@Override
public void uncaughtException(Thread thread, Throwable ex) {
System.out.println("uncaughtException")
System.exit(0)
Intent intent = new Intent(this, MainActivity.class)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
}
}
最后需要在Manifest中配置Application的标签android:name=".MyApplication",让整个应用程序使用我们自定义的Application类,这样就实现了当应用遇到崩溃异常时重启应用的效果。
我们在任意一个Activity中主动抛出下面异常,就会发现应用遇到异常后重启了,如果不处理的话,应用在遇到异常后就关闭了。
1.我们需要首先收集产生崩溃的手机信息,因为Android的样机种类繁多,很可能某些特定机型下会产生莫名的bug。
2.将手机的信息和崩溃信息写入文件系统中。这样方便后续处理。
3.崩溃的应用需要可以自动重启。重启的页面设置成反馈页面,询问 用户是否需要上传崩溃报告。
4.用户同意后,即将2中写入的崩溃信息文件发送到自己的服务器。
是在开发app时设置的相关功能,参考代码:假如开发的app有这个需求的话:崩溃后自动重启或者捕获异常信息。你可以参照下文:
package com.tan.abnormalrestart
import java.lang.Thread.UncaughtExceptionHandler
import android.app.Application
import android.content.Intent
public class AppContext extends Application
{
protected static AppContext instance
public void onCreate() {
super.onCreate()
instance = this
Thread.setDefaultUncaughtExceptionHandler(restartHandler)// 程序崩溃时触发线程 以下用来捕获程序崩溃异常
}
// 创建服务用于捕获崩溃异常
private UncaughtExceptionHandler restartHandler = new UncaughtExceptionHandler() {
public void uncaughtException(Thread thread, Throwable ex) {
restartApp()//发生崩溃异常时,重启应用
}
}
public void restartApp(){
Intent intent = new Intent(instance,MainActivity.class)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
instance.startActivity(intent)
android.os.Process.killProcess(android.os.Process.myPid()) //结束进程之前可以把你程序的注销或者退出代码放在这段代码之前
}
}
这个是application级别的应用
其实关键还是UncaughtExceptionHandler类
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)