美文网首页
综合技术

综合技术

作者: 要学的东西太多了 | 来源:发表于2018-10-15 15:43 被阅读0次

1.全局捕获异常可以自己创建crashHandler实现Thread.UncaughtExceptionHandler,并在Application初始化里面设置这个crashHandler,代码如下:

public class CarshHandler implements Thread.UncaughtExceptionHandler{
    private Context context;
    private static final boolean DEBUG = true;
    private static CarshHandler carshHandler;
    private Thread.UncaughtExceptionHandler uncaughtExceptionHandler;

    private CarshHandler() {
    }

    public static CarshHandler getInstance(){
        if(carshHandler==null){
            synchronized (CarshHandler.class){
                if(carshHandler==null){
                    carshHandler = new CarshHandler();
                }
            }
        }
        return carshHandler;
    }

    public void init(Context context){
        uncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
        this.context = context.getApplicationContext();
        Thread.setDefaultUncaughtExceptionHandler(this);
    }

    @Override
    public void uncaughtException(Thread t, final Throwable e) {
        if(uncaughtExceptionHandler !=null && !DEBUG){
            uncaughtExceptionHandler.uncaughtException(t,e);
        }else{
            //获取异常信息,这里是弹出弹窗,也可以做其他操作,比如写日志等等
            final StringBuilder builder = new StringBuilder();
            StackTraceElement[] trace = e.getStackTrace();
            builder.append(e.getMessage());
            builder.append("\nat ");
            builder.append(trace[0]);
            //必须新开线程,否则弹不出弹窗
            new Thread(new Runnable() {
                @Override
                public void run() {
                    //必须初始化looper,否则AlertDialog无法初始化handler
                    Looper.prepare();
                    Dialog dialog = new .Builder(context)
                            .setTitle("程序异常")
                            .setMessage(builder.toString())
                            .setPositiveButton("关闭", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    Process.killProcess(Process.myPid());
                                }
                            })
                            .create();
                    //ApplicationContext必须用系统级window,Androidmanifest也要声明权限                    
                    dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);
                    dialog.show();
                    Looper.loop();
                }
            }).start();
        }
    }
}

ApplicationonCreate方法里加下面两句代码:

CarshHandler carshHandler = CarshHandler.getInstance();
        carshHandler.init(this);

2.Android中单个dex文件最大方法数为65536,大型应用可能会出现方法数越界的问题。Android提供了multidex方案,使用有两种方法:让应用的application继承MultiDexApplication;重写ApplicationattachBaseContext方法,在里面加Multidex.install(this)multidex可能存在的问题:
(1)启动速度降低,甚至出现ANR,尽量避免生成较大的dex文件。
(2)无法兼容4.0及以下,同时可能会出现大量消耗内存的情况,导致应用崩溃。

3.动态加载技术也叫插件化技术,用来实现热插拔即热更新。它需要解决三个问题:资源访问;Activity的生命周期管理;插件ClassLoader的管理。

相关文章

  • 综合技术

    使用CrashHandler来获取应用的crash信息 首先需要实现一个UncaughtExceptionHand...

  • 综合技术

    1.全局捕获异常可以自己创建crashHandler实现Thread.UncaughtExceptionHandl...

  • 综合技术

    13.1 使用 CrasHandler 来获取应用的 crash 信息 Android 为开发者提供了 setDe...

  • 笔记:综合技术

    综合技术 android 65535方法数限制原因 Android app中所有代码都放在dex文件中,dex中存...

  • (十三)综合技术

    13.1 使用CrashHandler来获取应用的crash信息 13.2 使用multidex来解决方法数越界 ...

  • Android 综合技术

    导语 本章主要讲解,CrashHandler来监视App的crash信息,通过Google的multiDex方案解...

  • 腾讯后端面经(含答案)

    鹅厂 一面基础技术面 二面项目技术面 三面综合技术面 总结 某东南亚互联网公司 一面技术面 二面研发经理综合面试 ...

  • 腾讯后端面经(含答案)

    鹅厂 一面基础技术面 二面项目技术面 三面综合技术面 总结 某东南亚互联网公司 一面技术面 二面研发经理综合面试 ...

  • 艺龙--技术综合

    选择题 1.在实际开发过程中,我们需要程序中保持唯一的一个实例,即单例模式。说法正确的是? 其他正确。 它有私有成...

  • iOS + 优秀博文

    综合ibireme的技术博客Jamin's BLOGSunny的技术博客MrPeak杂货铺Holko.plCasa...

网友评论

      本文标题:综合技术

      本文链接:https://www.haomeiwen.com/subject/fpbfzftx.html