Android问题集锦

说明

一些问题集锦,采取Q-A的形式或者表格形式,用于列出问题描述-问题原因-解决方案

java.lang.IllegalStateException

编号 错误描述 闪退原因 解决方案
1 Not allowed to start service Intent { }: app is in background uid Android 8.0 + 不允许后台启动 Service 可以使用 JobIntentService
2 Only fullscreen opaque activities can request orientation 透明的 Dialog 样式的 Activity 在Android 8.0 版本的系统 不允许设置朝向 在代码中或者Manifest中去掉朝向相关的代码
3 Fragment not attached to a context Fragment 页面已经关闭,但 Fragment 里的定时任务或网络请求还在运行,任务完成后进行 UI 操作(内存泄漏) 通过架构层面解决内存泄漏问题,将View层和Model解耦;View 层发起的定时任务或网络请求页面关闭是要取消。
4 Fragment already added 相同的 Fragment 重复添加到 Activity Solution

android.app.RemoteServiceException

编号 错误描述 闪退原因 解决方案
1 Context.startForegroundService() did not then call Service.startForeground() 为了解决Android 8.0 + 不允许后台启动 Service 的问题,大家可能搜索到的解决方案是使用 startForegroundService ,但是没有在后面调用 Service.startForeground() JobIntentService

java.lang.NullPointException

编号 错误描述 闪退原因 解决方案
1 Attempt to invoke virtual method on a null object reference 使用空对象调用其成员方法或者属性 1,尽量使用 Kotlin 能解决绝大部分的空指针;2,通过聚检测代码,如 findbugs、lint等工具。

避免Fragment重复添加,导致页面重影

在内存重建(旋转屏幕、用户动态设置本App的权限),需要判断 Bundle savedInstanceState

1
2
3
4
5
6
7
if (savedInstanceState != null) {
myFragment = getSupportFragmentManager().findFragmentById(R.id.container);
}

if (myFragment == null) {
myFragment = new MyFragment();
}

如何避免 java.lang.IllegalStateException: Fragment already added 异常

异常的原因在于一个fragment实例多 add 多次。

1
2
3
4
5
6
7
8
FragmentTransaction ft = fragmentManager.beginTransaction();
if (fragment.isAdded()) {
ft.show(fragment);
} else {
//如果同一个fragment实例被add多会闪退:Fragment already added
ft.add(frameId, fragment);
}
ft.commitAllowingStateLoss();

在极端情况下哪怕判断了 isAdded 方法也会出现 Fragment already added 异常

可以使用 replace 方法代替 add 方法:

1
2
3
4
5
6
7
FragmentTransaction ft = fragmentManager.beginTransaction();
if (fragment.isAdded()) {
ft.show(fragment);
} else {
ft.replace(frameId, fragment);
}
ft.commitAllowingStateLoss();

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 nathanwriting@126.com

文章标题:Android问题集锦

字数:559

本文作者:Nathaniel

发布时间:2021-04-08, 11:04:47

最后更新:2023-11-06, 22:59:19

原始链接:http://example.com/2021/04/08/android-problem-collection/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

×

喜欢就点赞,疼爱就打赏