最近项目快要完事了,总结一下需要改进的地方
引入第三方库后要立刻测试
不管是直接导入jar文件,还是通过gradle添加的依赖,一定要打包release版本进行测试。另外建议每隔一段时间就打包release版本进行测试,否则最后项目完成了才发现混淆代码导致的各种问题就太晚了。
采用更安全的方式打开Activity
Android官方文档介绍道
Here’s a complete example that shows how to create an intent to view a map, verify that an app exists to handle the intent, then start it:
代码如下
// Build the intent
Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
// Verify it resolves
PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(mapIntent, 0);
boolean isIntentSafe = activities.size() > 0;
// Start an activity if it's safe
if (isIntentSafe) {
startActivity(mapIntent);
}
采用更安全的方式执行fragment transaction
如果在onSaveInstanceState()之后调用了FragmentTransaction#commit(),Android应用会抛出java.lang.IllegalStateException异常。onSaveInstanceState()的调用时机如下表所示:
| Honeycomb之前 | Honeycomb之后 | |
|---|---|---|
onSaveInstanceState()调用时机 | onPause()之前 | onStop()之前 |
而对于android support library来说,FragmentTransaction#commit()的调用时机的影响如下表所示
| Honeycomb之前 | Honeycomb之后 | |
|---|---|---|
在onPause()之前调用commit() | 正常 | 正常 |
在onPause()之后,onStop()之前调用commit() | 状态丢失 | 正常 |
在onStop()之后调用commit() | 抛出异常 | 抛出异常 |
执行commit()的最好时机分别为onCreate(),onResumeFragments(),onPostResume()方法。