Android崩溃异常
Ⅰ 诡异,Unity在安卓运行崩溃问题,求助
在整个开发阶段和测试阶段,出现了很多预料之外的事情,比如size是1M多的json文件解析、高清图片导致OOM、莫名其妙的崩溃等。这些意外无一不影响开发计划,增大压力,最直接的表现是晚上加班和周末加班。 写代码和修改代码远比想象中的难控制。用户体验增加了代码的细节处理难度、逻辑处理难度,android莫名的崩溃增加解决bug的难度。就这次开发,总结了一些经验。 测试人员经常会报告小米1手机运行壁纸软件时会崩溃的问题,崩溃日志是: java.lang.RuntimeException: Failed to register input channel. Check logs for details. at android.view.InputQueue.nativeRegisterInputChannel(Native Method) at android.view.InputQueue.registerInputChannel(InputQueue.java:92) at android.view.ViewRoot.setView(ViewRoot.java:570) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) at android.widget.Toast$TN.handleShow(Toast.java:411) at android.widget.Toast$TN$1.run(Toast.java:337) at android.os.Handler.handleCallback(Handler.java:587) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:130) 根据日志推测该崩溃是和Toast有关。可是问题就奇怪了,我在代码中只调用Toast.makeTest(...).show(),为什么会引起这个崩溃。然后根据测试人员的反馈,当设置壁纸成功后,会引起这个崩溃,而且测试人员是在频繁的操作下报出来这个问题的。根据这个现象,推断有可能以下两个原因引起的,一是,设置壁纸引起桌面发生变化,桌面发生变化时弹出toast会导致崩溃;二是,频繁不间断的弹出toast会引起这个问题。而之后测试人员反馈了一个新的现象,当进行新浪微博分享失败后(前提是该新浪微博帐号是有问题的),再去浏览壁纸图片也导致了该崩溃,而且此现象仅出现了一次再也不复现。该bug最终是遗留解决。 针对这种问题,在以后的版本开发中肯定也会出现,怎么避免它再次出现。我总结了从几个方面做努力。先借来小米1手机来玩,学习手机发烧友的习惯和测试人员的思维,然后体验小米1手机,对小米1要有更深入的认识;和小米进行沟通,还没有认识牛逼的朋友在小米做开发,所以可以先在小米论坛上做活跃用户,主动和对方和网友沟通;了解input channel是什么功能,什么机制,研究 anroid2.3的关于这块的native代码。 刚开始进入测试阶段时,测试人员每天都会报告壁纸软件频繁崩溃的问题。对于一些简单的崩溃问题,一般是空指针而且还复现,就不在这里说了。测试报告说,浏览壁纸图片保存壁纸,预览壁纸和设置壁纸时经常的崩溃,这种崩溃没有规律可复现但是很频繁出现。这种问题的原因是OOM,比如,在MX2手机上,桌面预览要使用的位图大小是1280 X 800 X 2 X 4字节 约等于8M,软件中的位图各种处理(缩放、剪切、渲染、多个activity同时存在等)会导致内存使用量飙升到50多M,当超过64M左右时,软件会报OOM错误。没有彻底解决OOM的方法,网上有很多避免OOM的方法,比如延迟加载图片、及时回收内存、弱引用等。另外在生成bitmap的地方要使用try 解决了这些崩溃问题后,还会有新的导致崩溃的原因。测试人员说中午吃完饭回来,打开壁纸软件突然崩溃。分析这个现象后,找到原因是,长期待机情况下android杀掉了壁纸软件的进程。但是疑问出现了,此时进程被杀掉了之后点击app的icon,不是又重新打开了进程,重新运行了吗,怎么会崩溃呢。经过分析,发现有个诡异的地方是,android待机后把壁纸进程给杀掉了,但是该软件的activity并没有从task中删除掉,所以当再点击app的icon时,会执行task顶层的activity的onCreate,而onCreate里边的一些东西还未初始化,会因为空指针而崩溃。 后来,测试人员报告了一个诡异的bug,安装软件后第一次打开软件,欢迎界面的图片显示不出来,以后每次打开软件欢迎界面的图片都能打开出来。图片是一个jpg文件,在raw中。最后找到原因是,在decode bitmap,scale bitmap时,其中要操作的一个变量imagewidth在第一次时是0,没有赋值,之后再操作就不是0,赋值了。但是为什么会这样,最后找到原因了,imagewidth是一个全局静态变量,该全局静态变量在另外一个线程中会被赋值(赋上屏幕的宽度)。由于线程的异步问题而导致第一次imagewidth是0。后来每次打开软件,并不是进程重启,而是activity重启,imagewidth赋的值还在。
Ⅱ 安卓系统为什么会崩溃,说得详细点
那你得找开发者,我也是用安卓,基本不崩溃。你的要么手机不是正品,要么就是机器配置不好,软件方面的话,系统文件丢失误删,下载有毒应用,和一些root权限操作,都有可能,最直接的可能是运存太小了
Ⅲ 如何解决android7.0及以上的权限崩溃问题
我现在使用的是净化大师这款软件,它集系统深度净化、内存回收、通知栏净化、预装应用卸载、应用权限管理为一体,操作很简单,即使是新手机用户也可以熟练运用,操作简单,并且可以选择是否开启“纯净模式”,开启之后系统就会被自动优化,方便快捷
Ⅳ 为什么Android应用异常后会自动重启
1.Android是一种以Linux与JAVA为基础的开放源代码操作系统,主要使用于便携设备。中国大陆地区较多人使用“安卓”。Android操作系统最初由Andy Rubin开发,被谷歌收购后则由Google公司和开放手机联盟领导及开发,主要支持手机与平板。
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.(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中写入的崩溃信息文件发送到自己的服务器。
Ⅳ android用timer做定时任务,崩溃的原因
在做定时任务的时候,有的同学可能能会用到Timer这个定时任务的辅助类,
但是使用它会有潜在的风险,风险如下,
(1)时间计算不准确问题
因为Timer是以绝对时间计算定时任务的,会受到系统时间的影响,如果在任务执行期间,更改了系统时间,那么会
导致时间计算不准确问题,导致任务没用按找预定的时间执行。
(2)只能单任务执行
简单讲就是,只能一次执行一个任务,如果前一个任务没有执行完成,后一个任务是无法并行执行的,只能等待前一个任务执行完成
才能执行。也有可能会出现这样的结果,前一个任务执行的时间太长,后几个任务时间短,可能在一个时间段内执行了多个任务,任务又
没有按照我们要执行的时间执行。
(3)非检查异常导致异步任务终止
Timer当在执行的过程中遇到非检查异常的时候,会导致本次任务失败,并且接下来的任务也无法被执行,Timer将会终止执行,这不是
我们要的结果,我们需要一套恢复机制。
Java5以后可以用下面的这个类来替代Time,并且解决了以上三个问题
java.util.concurrent.ScheledThreadPoolExecutor
那么在Android上呢,可以用 java.util.concurrent.ScheledThreadPoolExecutor,也可以用Handler机制做,
但是不建议使用Timer
Ⅵ android使用Thread.UncaughtExceptionHandler处理系统崩溃异常,uncaughtException方法被执行多次
电脑文件被破坏,启动不了,系统崩溃了,就蓝屏了,windows的老毛病了。
试下开机,按F8键,进安全模式,看能否正常进去(安全模式是系统最小加载服务启动模式)
如果连安全模式都进不去,就趁早重装系统。
只要重新安装系统就可以正常,通常常规安装系统方法:
1先设置U盘启动,U盘启动界面,用分区软件给固态分区并且4G对齐,
2还原系统镜像
3电脑重启,会从固态启动,并安装驱动。
4安装完成后,电脑重启就可以使用了。
安装系统稍有点复杂,上面只是简单的手写了点,还是太简陋了,需要具体的重装系统操作,你还是看下网上教程,很详细。
Ⅶ Android程序在手机上崩溃
正常状况,手机内存不够或者你的程序有问题,建议下载个内存清理的程序比如360,qq管家之类的,多清理几次就好了。