Android开发中出现的错误集
来源:互联网 发布:网络认证怎么弄 编辑:程序博客网 时间:2024/05/09 02:58
本文转自http://blog.sina.com.cn/s/blog_5da93c8f0102wo1f.html,仅供学习使用
1、 错误 :Can not perform this action after onSaveInstanceState
场景:应用中使用FragmentDialog统一管理弹出框,分别在基类BaseActivity和BaseFragment中增加显示和隐藏方法(show和dismiss)。在某些网络异步请求中,在请求开始时调用show()方法显示弹出框,再请求结束时调用dissmiss隐藏弹出框。
错误日志:
java.lang.IllegalStateException: Can not perform this actionafter onSaveInstanceState atcom.yunyue.weishangmother.activity.BaseFragmentActivity.showProgressDialog(BaseFragmentActivity.java:47)atcom.yunyue.weishangmother.activity.LoginActivity$1.onPrepare(LoginActivity.java:98)at com.yunyue.weishangmother.dao.BaseDao.doAction(BaseDao.java:45)atcom.yunyue.weishangmother.dao.AccountMangeDao.login(AccountMangeDao.java:35)
java.lang.IllegalStateException: Can not perform this actionafter onSaveInstanceState atcom.yunyue.weishangmother.activity.BaseFragmentActivity.dismissProgressDilag(BaseFragmentActivity.java:63)atcom.yunyue.weishangmother.activity.GoodsListActivity$5.onFinish(GoodsListActivity.java:209)atcom.yunyue.weishangmother.dao.BaseDao$1.onFinish(BaseDao.java:108)
java.lang.IllegalStateException: Can not perform this actionafter onSaveInstanceState atcom.yunyue.weishangmother.activity.BaseFragmentActivity.dismissProgressDilag(BaseFragmentActivity.java:64)atcom.yunyue.weishangmother.fragment.BaseFragment.dissmissProgressDialog(BaseFragment.java:119)atcom.yunyue.weishangmother.fragment.HomeFragment$1.onFinish(HomeFragment.java:151)atcom.yunyue.weishangmother.dao.BaseDao$1.onFinish(BaseDao.java:107)
问题分析:
情况一:在一个程序中使用fragment+异步更新界面,今天出现发现异常,记录解决办法。
异常:java.lang.IllegalStateException: Can not perform this actionafter onSaveInstanceState;
分析:仔细查看后发现,是由于异步线程结束后,要弹出对话框提示,但是这时候fragment已经进入后台,所以抛出这个异常;
解决办法:在线程运行结束后,需要弹出对话框的时候,先做一个判断isResumed()。
google给的文档中是这样说的:
public final boolean isResumed () Return true if the fragment isin the resumed state. This is true for the duration of onResume()and onPause() as well.
翻译:当fragment在resumed状态时返回true,即fragment在生命周期的onResume()和onPause()之间时返回true。
情况二:在Activity中dismissDiaog时,提示上述错误。
解决方法:
DialogFragment本身提供了两个方法:
void dismiss()
dismissAllowingStateLoss
使用dismissAllowingStateLoss
参考:把commit()方法替换成 commitAllowingStateLoss()就行
http://blog.sina.com.cn/s/blog_5da93c8f0101rgb2.html
情况三:针对Activity中showDialog()时显示上述问题,参考情况一,增加一个标志位isResume来控制。
2、Could not read input channel file descriptors from parcel.
错误日志:
java.lang.RuntimeException: Could not read input channel filedescriptors from parcel. atandroid.view.InputChannel.nativeReadFromParcel(Native Method) atandroid.view.InputChannel.readFromParcel(InputChannel.java:148) atandroid.view.InputChannel$1.createFromParcel(InputChannel.java:39)atandroid.view.InputChannel$1.createFromParcel(InputChannel.java:36)
网上给出的说法:
(1)RemoteView中添加的图片太大了,超过40K会报这个异常
(2)Intent传递的数据太大了超过1M也会报这个错误
(3)FileDescripter太多而且没有关闭,looper太多没有quit。
(4)试试在AndroidManefest.xml中对当前Activity配置configchange=“orientation|keyboardHidden”强制在Activity横竖屏切换的时候不重新onCreate。
3、android.os.TransactionTooLargeExcep
通过代码分析是在调用友盟分享时出现错误。具体在shareWithCustomPanel方法中建立分享内容(包括标题、内容、图片链接),其中
public void setShareContent(String title, String content, StringimagePath, String url, String id, String type) {
this.title = title;
this.content = content; this.id = id;
this.type = type;
if (!TextUtils.isEmpty(imagePath)) {
} else {
urlImage = new UMImage(mActivity, R.drawable.ic_launcher);
} urlImage.setTargetUrl(url); this.url = url; }
分析可能是传入的图片链接中图片过大,导致上述问题。
4、java.lang.IllegalStateException: eglMakeCurrent failedEGL_BAD_ALLOC atandroid.view.HardwareRenderer$GlRenderer.createSurface(HardwareRenderer.java:1123)atandroid.view.HardwareRenderer$GlRenderer.createEglSurface(HardwareRenderer.java:1010)atandroid.view.HardwareRenderer$GlRenderer.initialize(HardwareRenderer.java:833)atandroid.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1845)atandroid.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1261)
5、java.lang.IllegalArgumentException
解决:发现是webview的ZoomButton,也就是那两个放大和缩小的按钮,导致的。如果设置为让他们出现,并且可以自动隐藏,那么,由于他们的自动隐藏是一个渐变的过程,所以在逐渐消失的过程中如果调用了父容器的destroy方法,就会导致Leaked。所以解决方案是,在destroy之前,先让他俩立马消失。 我的解决办法是,在finish掉此activity时,把子view全部remove掉。理论上说,只需要remove这个zoomview就可以,但是我没找到获取该view的办法,只好remove掉所有的子view。这样在activity destroy时就不会报WindowLeaked的错误了。
@Override public void finish() {
ViewGroup view = (ViewGroup) getWindow().getDecorView();
view.removeAllViews();
super.finish();
}
也有人说,可以直接设置webView.setVisiable(View.GONE);
在Activity的onDestroy里面加上这么一句:web.setVisibility(View.GONE);把WebView设置为GONE就可以了。
- Android开发中出现的错误集
- Android开发中出现的错误集
- android开发中出现的错误集(不断更新)
- android开发中出现的错误集(不断更新)
- android开发中出现的错误集(不断更新)
- android开发中出现的错误集(不断更新)
- Android开发中出现的错误集(不断更新)
- Android开发中出现的错误集(不断更新)
- Android中出现的各种错误
- android项目中出现的错误
- Android中出现的错误及解决
- Android开发中反编译时出现Unsupported major.minor version 51.0错误的问题
- android开发中出现的问题集锦
- android开发出现No Launcher activity found错误的解决方案
- 在windows开发react-native android应用程序出现的错误
- Oracle开发中出现FRM-40831错误的解决办法?
- 项目开发过程中出现的错误一
- 项目开发过程中出现的错误二
- 反反爬虫|应对网站反爬虫策略,更高效地爬大量数据
- poj3348 Cows【凸包模板】
- 文章标题
- oracle_多表_分页_集合查询
- Gradle 与 Android的相互依赖
- Android开发中出现的错误集
- c++内存管理学习纲要
- linux上redis集群的安装以及redis.conf配置(去注释版)
- [Java]“语法糖”系列(二)之Lambda表达式/匿名函数(Lambda Expression)
- 欢迎使用CSDN-markdown编辑器
- 树莓派3b+设置静态ip
- 面向对象程序设计思想简述
- java---三种排序的方法
- Linux系统下安装rz/sz命令及使用说明