RESULT_OK
的状态码, Activity
的启动模式不能为设置为的 singleTask
或者 singleInstance
startActivityForResult(intent,requestCode)
方法时第二个参数不应该使用过大的整数,例如超过65535View
的宽高,而应在 view.post()
里面操作PopupWindow
的 show
方法显示,也应在 view.post()
里面操作这个错误主要发生在 Intent
中传递了大量的数据。
例如有一个 Activity
页面跳转中,经常会使用 Intent
传递数据,但是稍不留神就会把一个很大的对象(列表, bitmap
等)传递过去,这时候就会出现这个异常。
建议不要在 Intent
中传递大数据,应该使用持久化的方式共享数据。而且数据过多也会影响 Activity
的启动速度。
类似问题 startActivity()
时发生以下错误
java.lang.SecurityException: Unable to find app for caller android.app.ApplicationThreadProxy。This log means that your app is having trouble handling a communication intent. Sometimes problems like this can be cause by sending an intent with big extras. Try to reduce the dimension of the image or, and this is the best way, save your image on the sd and put in the extras only the Uri of that image。
即不要在 Intent
中传递大量的数据数据,否则会抛异常。
setCustomAnimations
要在 replace()
, add()
或 remove()
等对 Fragment
添加或者移除的方法前面。
Application
会被初始化多次,即 onCreate()
方法会执行多次。在这里的一些初始化逻辑,例如数据库初始化,就需要根据判断当前进程的名称来进行初始化。ContentProvider
。WebView
通过 addJavascriptInterface()
注入本地实现的方法类 JsBridge
供 H5 访问,但是打包时应该把自定义的 JSBridge
类加入到混淆规则里面,否则混淆后 H5 将有可能无法访问本地方法。
WebView
通过 loadUrl()
执行 JS 方法后却无响应,但是前端确定已提供。这时候应该考虑使用主线程(例如 WebView.post()
)来执行 loadUrl()
;有些机型使用硬件加速出现了一些奇诡的UI问题,可以检查一下控件所在 Activity
是否配置了硬件加速,多数情况下去掉硬件加速就 OK 了。
如果需要硬件加速的配置,可以考虑在控件本身上使用,而不是 Activity
上。
Activity
中使用 Fragment
, Activity
中有一个控件 ID 为 R.id.widget_btn
,但是在 Fragment
里面也有一个控件 ID 为 R.id.widget_btn
,那么在 Fragment
里面使用 getActivity().findViewById()
时就无法取到正确的控件引用。
WebView
是一个承载体,各种内容的渲染需要使用 WebViewChromClient
去实现,所以需要设置一个默认的 WebChromeClient
实现。但是一般情况下实现自定义 WebView
都会重写 onAlert
和 onConfirm
方法,使用 AlertDialog
来展示 H5
中的 alert
或者 confirm
对话框。
查看一下 GridView
的布局文件是否设置了 android:scrollbarStyle="outsideInset"
属性,如果有,去掉这个属性。
需要用 drawable
来设置这个属性,写一个 drawable
文件,例如
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<solid android:color="@color/white" />
<size android:width="1dp" />
</shape>
不要 ListFragment
的 onCreateView()
中设置 footer
,要在 onActivityCreate()
中设置,否则会 Causedby:java.lang.IllegalStateException:Contentviewnotyet created
。
可修改 TabView
中的 mMaxTabWidth
的值,默认时 mMaxTabWidth=(int)(MeasureSpec.getSize(widthMeasureSpec)*0.4f);
修改为 mMaxTabWidth=(int)(MeasureSpec.getSize(widthMeasureSpec)*1f);
通常需要在一个列表中对 Item
的文本作一些特殊的修饰处理,例如对文本添加简单的图标,文本颜色,字体高亮等等效果,这时候 SpannableStringBuilder
就可以帮上忙了。但如果在 getView()
方法里构造 Spannable
对象,明显会影响列表的展示的效率,应该在线程中先这些 Spannable
数据构造好,而 getView()
尽量少做影响列表性能的操作。