美文网首页
android 系统牛逼

android 系统牛逼

作者: 细雨么么 | 来源:发表于2022-11-15 10:57 被阅读0次

2022年11月15日10:46:07
感叹下 Android 的google工程师真牛逼啊。
今天发现了一个bug,在一个非常老的项目里,运行了三四年,都没崩溃。
起因是:
[b.v]203
[u.o]Android 10;A227---------------------Crash Device End---------------------
java.util.ConcurrentModificationException
at java.util.ArrayListItr.next(ArrayList.java:860) at com.kalerm.android.sdk.cache.SettingInfoCache.getSettingInfoByKey(SettingInfoCache.java:134) at com.kalerm.android.sdk.cache.SettingInfoCache.getBooleanUseValueByKey(SettingInfoCache.java:163) at com.kalerm.android.launcher.ui.fragment.StdServiceMakeFragment.initButtonStatus(StdServiceMakeFragment.java:141) at com.kalerm.android.launcher.ui.fragment.StdServiceMakeFragment.initNecessaryData(StdServiceMakeFragment.java:129) at com.kalerm.android.launcher.ui.fragment.StdServiceMakeFragment_.onViewChanged(StdServiceMakeFragment_.java:118) at org.androidannotations.api.view.OnViewChangedNotifier.notifyViewChanged(OnViewChangedNotifier.java:41) at com.kalerm.android.launcher.ui.fragment.StdServiceMakeFragment_.onViewCreated(StdServiceMakeFragment_.java:80) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1313) at android.app.FragmentManagerImpl.addAddedFragments(FragmentManager.java:2431) at android.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2210) at android.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2166) at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2067) at android.app.FragmentManagerImpl1.run(FragmentManager.java:742)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7397)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:935)
===============Crash End===============
一个数组修改读取异常。应该是在修改的时候,在遍历读取,导致崩溃。
一个看起来没啥毛病的一段代码:

 public SettingInfoItem getSettingInfoByKey(String key) {
        SettingInfoItem settingInfoItem = new SettingInfoItem();
        if (settingInfoItemList == null) {
            settingInfoItemList = SettingInfoItemManager.getInstance(mContext).find();//从数据库读
        }
        for (SettingInfoItem item : settingInfoItemList) {
            if (key.equals(item.getSetting_key())) {
                //use没有值的时候显示的时候就用default
                if (TextUtils.isEmpty(item.getUse_value())) {
                    item.setUse_value(item.getDefaults_value());
                }
                settingInfoItem = item;
                break;
            }
        }

        //这里说明这个key是新增的,不在已经初始化好的db当中,我们要构造出来
        if (settingInfoItem.get_id() == 0) {
            LogUtil.e("fuck, id is not in db load assets, key is " + key);
            if (assets == null) {
                assets = SettingInfoInitManager.getInstance(mContext).getSettingInfoFromAssets();//从config文件硬编码读
            }
            if (assets.containsKey(key)) {
                settingInfoItem.setDefaults_value(assets.get(key));
                settingInfoItem.setUse_value(assets.get(key));
            }
            settingInfoItem.setSetting_key(key);
            settingInfoItemList.add(settingInfoItem);//把它加到缓存中去
        }

        return settingInfoItem;
    }

实际上会造成,如果数据库没有数据,新增一个id为0的item项,会造成重复的add进list。
结果就是。在一些轮询设置读取中,每次都会新增一个id为0 ,然而key一样的数据,进入list。
这个*settingInfoItemList * 就一直在自增,设备不关机,就没四五秒增加三四条。居然一直没崩溃,用了好几年都没事。
感叹一句,google工程师牛逼,ArrayList 写的好啊。

相关文章

  • android 系统牛逼

    2022年11月15日10:46:07感叹下 Android 的google工程师真牛逼啊。今天发现了一个bug,...

  • 余紫玄说够牛逼系统

    余紫玄说够牛逼系统 够牛逼是什么意思? 就是您够牛逼。 您的话术非常牛逼,您的流量非常牛逼。 您能出单,您就够牛逼...

  • 余紫玄说社群变现

    社群是如何变现的? 1、图片牛逼。 2、客户案例牛逼。 3、故事牛逼。 4、广告尾巴系统牛逼。 5、演讲的时候,讲...

  • 彻底理解Android Support Library

    前言 能够让App运行在大量不同型号和系统版本的设备上是Android系统最牛逼的地方之一。注意,我这里说的是设备...

  • 同行系统

    同行系统 白彦洁方法之同行系统 只要你参考100个牛逼的同行,你就不缺内容,复制+改编+优化。 内容哪里找?找牛逼...

  • 装逼

    裝逼不牛逼 牛逼不装逼 牛逼要裝逼 装逼真牛逼

  • Android测试版本发布,方便验收,搭建本地类似 fir 服务

    介绍最牛逼的Android测试版本发包方式 Android发测试包的方式很多种: 直接拿机器装:这种方式最傻逼,麻...

  • Android ConstraintLayout

    Android ConstraintLayout详解 AndroidStudio2.2开始,就推出了一个牛逼的布局...

  • 牛逼牛逼牛逼

    有一天, 我在墨爾本城區的一家泰國人餐廳吃飯,隔壁桌子吃飯的是一家多民族家庭,先生估計是西南歐洲某個民族的...

  • 程序员的骄傲不是嘴炮上的互怼

    Angular 牛逼,还是 Vue 牛逼有那么重要么? 没有。React-Native 牛逼,还是 Weex 牛逼...

网友评论

      本文标题:android 系统牛逼

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