Android开发中出现的错误集(不断更新)

(转载)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 action after onSaveInstanceState at com.yunyue.weishangmother.activity.BaseFragmentActivity.showProgressDialog(BaseFragmentActivity.java:47) at com.yunyue.weishangmother.activity.LoginActivity$1.onPrepare(LoginActivity.java:98) at com.yunyue.weishangmother.dao.BaseDao.doAction(BaseDao.java:45) at com.yunyue.weishangmother.dao.AccountMangeDao.login(AccountMangeDao.java:35)

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState at com.yunyue.weishangmother.activity.BaseFragmentActivity.dismissProgressDilag(BaseFragmentActivity.java:63) at com.yunyue.weishangmother.activity.GoodsListActivity$5.onFinish(GoodsListActivity.java:209) at com.yunyue.weishangmother.dao.BaseDao$1.onFinish(BaseDao.java:108)

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState at com.yunyue.weishangmother.activity.BaseFragmentActivity.dismissProgressDilag(BaseFragmentActivity.java:64) at com.yunyue.weishangmother.fragment.BaseFragment.dissmissProgressDialog(BaseFragment.java:119) at com.yunyue.weishangmother.fragment.HomeFragment$1.onFinish(HomeFragment.java:151) at com.yunyue.weishangmother.dao.BaseDao$1.onFinish(BaseDao.java:107)  

问题分析:

情况一:在一个程序中使用fragment+异步更新界面,今天出现发现异常,记录解决办法。

异常:java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState;

分析:仔细查看后发现,是由于异步线程结束后,要弹出对话框提示,但是这时候fragment已经进入后台,所以抛出这个异常;

解决办法:在线程运行结束后,需要弹出对话框的时候,先做一个判断isResumed()。

google给的文档中是这样说的:

public final boolean isResumed () Return true if the fragment is in 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()  说明:Dismiss the fragment and its dialog. void  

dismissAllowingStateLoss() 说明:Version of dismiss() that uses FragmentTransaction.commitAllowingStateLoss().

使用dismissAllowingStateLoss可以忽略状态。但是对于show()方法提供的两个方法,内部都是用了commit()提交,而不能使用commitAllowingStateLoss()。

参考:把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 file descriptors from parcel. at android.view.InputChannel.nativeReadFromParcel(Native Method) at android.view.InputChannel.readFromParcel(InputChannel.java:148) at android.view.InputChannel$1.createFromParcel(InputChannel.java:39) at android.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.TransactionTooLargeException(分享图片太大) android.os.TransactionTooLargeException at android.os.BinderProxy.transact(Native Method) at android.view.IWindowSession$Stub$Proxy.addToDisplay(IWindowSession.java:683) at android.view.ViewRootImpl.setView(ViewRootImpl.java:525) at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:260) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) at android.widget.Popupwindows.invokePopup(PopupWindow.java:1019) at android.widget.PopupWindow.showAtLocation(PopupWindow.java:850) at android.widget.PopupWindow.showAtLocation(PopupWindow.java:814) at com.yunyue.weishangmother.util.UMengSDK.shareWithCustomPanel(UMengSDK.java:97)

通过代码分析是在调用友盟分享时出现错误。具体在shareWithCustomPanel方法中建立分享内容(包括标题、内容、图片链接),其中

public void setShareContent(String title, String content, String imagePath, String url, String id, String type) {

this.title = title;

this.content = content; this.id = id;

this.type = type;

if (!TextUtils.isEmpty(imagePath)) {

   urlImage = new UMImage(mActivity, imagePath);  

} else {  

urlImage = new UMImage(mActivity, R.drawable.ic_launcher);

} urlImage.setTargetUrl(url); this.url = url; }

分析可能是传入的图片链接中图片过大,导致上述问题。


4、java.lang.IllegalStateException: eglMakeCurrent failed EGL_BAD_ALLOC at android.view.HardwareRenderer$GlRenderer.createSurface(HardwareRenderer.java:1123) at android.view.HardwareRenderer$GlRenderer.createEglSurface(HardwareRenderer.java:1010) at android.view.HardwareRenderer$GlRenderer.initialize(HardwareRenderer.java:833) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1845) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1261)


5、java.lang.IllegalArgumentException: Receiver not registered: android.widget.ZoomButtonsController$1@3bdd2de8 at android.app.LoadedApk.forgetReceiverDispatcher(LoadedApk.java:871) at android.app.ContextImpl.unregisterReceiver(ContextImpl.java:2110) at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:529) 

解决:发现是webview的 ZoomButton,也就是那两个放大和缩小的按钮,导致的。如果设置为让他们出现,并且可以自动隐藏,那么,由于他们的自动隐藏是一个渐变的过程,所以在逐渐消失的过程中如果调用了父容器的destroy方法,就会导致Leaked。 所以解决方案是,在destroy之前,先让他俩立马消失。 我的解决办法是,在finish掉此activity时,把子view 全部remove掉。理论上说,只需要remove这个zoom view就可以,但是我没找到获取该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就可以了。

http://blog.csdn.net/a345017062/article/details/6838449


更多Android开发问题,请看:

http://my.oschina.net/banxi/blog/49562


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 是Google开发的基于Linux平台的开源手机操作系统。它包括操作系统、用户界面和应用程序—— 移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍。 AndroidJava为编程语言,使接口到功能,都有层出不穷的变化,其Activity等同于J2ME的MIDlet,一个 Activity 类(class)负责创建视窗(window),一个活动的Activity就是在 foreground(前景)模式,背景运行的程序叫做Service。两者之间通过由ServiceConnection和AIDL连结,达到复数程序同时运行的效果。 Android基础阶段:平台架构特性(JAVA/C) Market/应用程序组件 环境搭建与部署/打包与发布 AVD/DDMS/AAPT 调试与测试 相关资源访问/资源制作 Activity/Service/Broadcast Receiver/Content Provider/原理(生命周期)及深层实现. Android进阶初级:组件Widget/ 菜单Menu/ 布局Layout 详解 Xml解析(Pull/Dom/Sax)/JNI 解析SQL数据库原理, SQLit e /SharedPreferences/File详解 多媒体Audio/Video/Camera 详解 Android进阶高级:蓝牙/WIFI SMS/MMS 应用实现 深层次解析GPS原理,实现LocationManager/LocationProvider 进行定位/跟踪/查找/趋近警告以及Geocoder正逆向编解码等技术细节 2D图形库(Graphics/View)详解 SDCARD/传感器/手势 应用实现 《老罗Android视频教程(第一季)》的视频一共分为15个章节, 涵盖了Android入门、常用UI布局介绍、HTTP编程、 XML与Json数据解析、JDBC与Web编程、常用UI控件、 数据储存与文件操作、对话框、通知、菜单、 LoaderManager异步加载、多线程(AsyncTask与Handler)、 百度地图等十五个模块,一共102。 本网盘分享章节编号是按照视频更新的先后顺序编号的,具体学习可参考如下章节顺序: 【第一版第一章】老罗Android开发视频--入门介绍(9) 【第一版第二章】老罗Android开发视频--常用UI布局介绍(5) 【第一版第三章】老罗Android开发视频--HTTP协议编程(4) 【第一版第四章】老罗Android开发视频--解析XML数据(3) 【第一版第五章】老罗Android开发视频--解析JSON数据(4) 【第一版第六章】老罗Android开发视频--服务器端JDBC编程(2) 【第一版第七章】老罗Android开发视频--服务器端Web编程(6) 【第一版第八章】老罗Android开发视频-常用UI控件(33) 【第一版第九章】老罗Android开发视频--存储数据和文件(7) 【第一版第十章】老罗Android开发视频--对话框介绍(4) 【第一版第十一章】老罗Android开发视频--通知的使用(2) 【第一版第十二章】老罗Android开发视频--菜单的使用(4) 【第一版第十三章】老罗Android开发视频--异步加载数据库(2) 【第一版第十四章】老罗Android开发视频--多线程编程(7) 【第一版第十五章】老罗Android开发视频--百度地图实战开发(10

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值