安卓开发应用闪退

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓开发应用闪退相关的知识,希望对你有一定的参考价值。

如果手机打开该软件出现闪退,可尝试操作以下方法:
1.可能是该软件缓存较多导致无法正常运行,建议清除软件缓存尝试:设置-查找应用程序管理器”-(全部)-查找该软件-(存储)-清除数据(注:该应用程序的全部数据将永久性删除)。
2.若是可卸载软件,建议将软件卸载后重新安装或更换其他软件版本再次安装尝试。
3.若无效,请更新手机系统版本:设置-关于手机(关于设备)-手动下载更新/自动下载更新(软件更新/系统更新-更新)。注:升级前请备份设备中数据。
4.若已是最新版本,请备份设备中数据然后恢复出厂设置尝试。
若上述操作后问题依然存在,请您携带购机发票、包修卡和机器送到服务中心检查。
参考技术A 若手机打开软件出现闪退、强制关闭等情况,三星手机一般建议进行以下操作:
1.可能是该软件缓存较多导致无法正常运行,建议清除软件缓存尝试:设置-查找应用程序管理器”-(全部)-查找该软件-(存储)-清除数据(注:该应用程序的全部数据将永久性删除)。
2.若是可卸载软件,建议将软件卸载后重新安装或更换其他软件版本再次安装尝试。
3.若无效,请更新手机系统版本。注:升级前请备份设备中数据。
4.若已是最新版本,请备份设备中数据然后恢复出厂设置尝试。
若上述操作后问题依然存在,请您携带购机发票、包修卡和机器送到服务中心检查。
参考技术B 用Eclipse做android开发时,经常会遇到程序闪退的情况,目前我遇到的有两种情况,一是新建的activity没有在androidfest里面注册,二是使用listView时的id没有使用默认的android:list 参考技术C 通过logcat查看奔溃日志。过滤出error的信息,然后找到对应的代码修改就行了。 参考技术D 把错误日志贴出来,不然没办法排查问题,不然就把你代码贴出来看看

阿里安卓面试分析: Android应用的闪退(crash)问题跟踪和解析

一:问题描述
    闪退(Crash)是客户端程序在运行时遭遇无法处理的异常或错误时而退出应用程序的表现,请从crash发生的原因分类与解决方法、在出现crash后如何捕捉并分析异常这两个问题给出自己的解决方案。
    我们以Android平台为例,介绍下如何捕获Android应用的闪退信息,以帮助我们定位和解决导致闪退的问题代码。
二:Android中的闪退
    在讲解Android中的闪退之前,我们先来简单的复习下Java中的异常。
1.Java中的异常
    Java中的异常层次结构如下图所示:


    我们可以看到Throwable类是异常层级中的基类。Error类表示内部错误,这类错误使我们无法控制的;Exception表示异常,RuntimeException及其子类属于未检查异常,这类异常包括ArrayIndexOutOfBoundsException、NullPointerException等,我们应该通过条件判断等方式语句避免未检查异常的发生。IOException及其子类属于已检查异常,编译器会检查我们是否为所有可能抛出的已检查异常提供了异常处理器,若没有则会报错。对于未检查异常,我们无需捕获(当然Java也允许我们捕获,但我们应该做的事避免未检查异常的发生)。
    了解了这些我们大概可以知道,不论Android应用因为什么原因闪退,我们只要能够捕获引起闪退的异常,那么我们就可以进行异常处理。对于已检查异常还好说,数量相对较少而且编译器的强制下能够保证我们为所有代码中可能抛出的已检查异常设置异常处理器。然而对于未检查异常,我们难以预测代码在一些极端情形下(比如劣质的SD卡、糟糕的网速)会触发什么样的异常,因而很难捕获所有可能的未检查异常。好消息是Android为我们提供了获取Android应用的闪退信息的机制,下面我们就来介绍一下。
2.捕获导致闪退的异常
    运行的Android进程中存在一个UncaughtExceptionHandler对象(未捕获异常处理器),我们可以通过Thread类的静态方法setDefaultUncaughtExceptionHandler设置当前进程的UncaughtExceptionHandler对象。当出现一个未捕获异常时,系统会调用出现异常的进程的UncaughtExceptionHandler对象的uncaughtException方法,也就是说在Android应用闪退前我们可以在这个方法中获取引起闪退的异常信息。UncaughtExceptionHandler是一个接口,其中只定义了一个uncaughtException方法。
    基于以上的分析我们知道了:只要将当前进程的未捕获异常处理器设置为我们自定义的UncaughtExceptionHandler实例,我们就可以通过重写UncaughtExceptionHandler方法来在闪退前获取导致闪退的异常的详细信息。下面的代码中我们的自定义未捕获异常处理器实现了UncaughtExceptionHandler接口:

    public class CrashHandler implements UncaughtExceptionHandler {
        @Override
        public void uncaughtException(Thread t, Throwable e) {
            try {
                //传入这个方法的参数e就是引起应用crash的异常,我们可以在这里获取异常信息,可以把异常信息上传到服务器以便统一分析,也可以保存在文件系统中
            } catch (Exception e) {
                ...
            }
        }
    }

    设计好了自定义未捕获异常处理器后,我们只需把它设置为当前进程的未捕获异常处理器即可,相关代码如下:

    Thread.setDefaultUncaughtExceptionHandler(new CrashHandler());

3.第三方解决方案
    关于Android应用的crash分析与处理,有很多成熟的第三方解决方案,比如Bugly、ACRA等,大家如果感兴趣可以自行了解。

以上是关于安卓开发应用闪退的主要内容,如果未能解决你的问题,请参考以下文章

[Android Studio]开发APP应用出现软件程序打开闪退的排错

安卓应用开发中Activity之间怎么用按钮进行跳转?

为啥安卓手机老是闪退啊?

安卓手机软件闪退怎么办 安卓软件停止运行解决方法

安卓软件闪退怎么修复

阿里安卓面试分析: Android应用的闪退(crash)问题跟踪和解析