美文网首页
android 两个bug

android 两个bug

作者: 静夜思亲 | 来源:发表于2018-10-19 16:41 被阅读0次

    解决Android开发中遇到的一些小问题

    一、我们在开发的过程中喜欢将一些app常用的数据对象保存在Application中,使用起来很方便。但是有的时候APP崩溃了,原因是空指针,而导致空指针的原因正式正式这些数据。

    用户按home键退出app。长时间的其他操作过后,系统为了回收内存kill掉了这个app。接下来就是crash的部分了,用户重新打开这个App。Android系统创建一个新的MyApplication 实例并恢复 当前Activity。当前Activity从新的MyApplication去获取对象,由于这个MyApplication是系统新创建的对象,之前保存的数据全为空了,这是因为application 对象不会一直呆着内存里面,它会被kill掉。与大家普遍的看法不同之处在于,实际上app不会重新开始启动。

    Android系统会创建一个新的 Application 对象,然后启动上次用户离开时的activity以造成这个app从来没有被kill掉得假象。因此在Application中存放对象会产生很严重的后果,推荐使用SP。

    二、解决有的手机APP退至后台后点击应用图标,应用重新启动的问题。

    在你应用的第一个页面的setContentView(...)之前添加如下代码:

           if (!this.isTaskRoot()) {
                Intent intent = getIntent();
                if (intent != null) {
                    String action = intent.getAction();
                    if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && Intent.ACTION_MAIN.equals(action)) {
                        finish();
                        return;
                    }
                }
            }
    

    在清单文件中将该页面的启动模式的代码删除

    三、APP主页面使用fragmentManager.beginTransaction()添加fragment时,当退出应用长时间不操作,返回应用时,fragment发生重叠。

    原因:因为每当我们离开Activity的时候,切换到后台的时候,当内存不够用,Fragment所在Activity被销毁,会调用onSaveInstanceState()方法,Fragment都会被保存起来,当我再次回到这个app的时候,通过onCreate中的参数savedInstanceState恢复了之前的fragment,但是只是保存了数据,Fragment的show状态并没有被保存起来,就导致了界面重叠。

    解决方法

    重写onSaveInstanceState(...)空实现,即不允许activity保存我销毁之前的状态
    @Override
        public void onSaveInstanceState(Bundle outState) {
            //super.onSaveInstanceState(outState, outPersistentState);
        }
    

    相关文章

      网友评论

          本文标题:android 两个bug

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