记录近期在 Android 开发上遇到的一些深坑

最近在开发 App 测试的时候遇到了一些坑,在这里记录一下,防止以后再遇到时又要浪费时间。

1. Fragment 中的 onAttach 方法没有被调用

在 Android 5.0 (API 21) 系统手机上测试时 App 抛出了空指针异常,而在其他测试机(均等于或高于 Android 6.0)上运行正常。
经排查发现时 Fragment 中的 OnAttach 方法没有被调用。

原来 Android 在 API 23 以后重载了 Fragment 中的 OnAttach 方法。
之前的

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
}

被重载为了

@Override
public void onAttach(Context context) {
    super.onAttach(context);
}

而我在继承 Fragment 的类中只重写了第二个方法,也就是 API 23 以后的方法。
所以我们复写的 OnAttach 方法在 API 21 的手机上没有被调用。

只需要复写 onAttach(Activity activity) 方法,并且添加一句 SDK 版本判断。

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
        // Do something...
    }
}

问题解决。

2. 华为手机上 Logcat 全部显示 some logs have been lost

在一部华为手机上(Huawei GR3 HWTAG-L6753)上测试时 App 发生了 Crash,奇怪的是查看文件没有生成 CrashLog 文件。
于是连上 ADB 查看 Logcat,发现输出的全是

W/AEE : some logs have been lost

根据 StackOverflow 上的回答 android - Huawei, logcat not showing the log for my app? - Stack Overflow

Dial
*#*#2846579#*#*
and you will see a hidden menu. Go to the Project Menu > Background Setting > Log setting and define the log availability (log switch) and level (log level setting).

在拨号界面拨号 *#*#2846579#*#* 进入隐藏菜单开启 Log 输出以后,就能正常查看 Logcat 信息了。
(经测试开启后不需要重启手机,评论中有人提到部分手机重启手机将重置此设置)

发表评论

电子邮件地址不会被公开。