1. Activity的启动模式
启动方式
- standard(默认模式):创建新的Activity
- singleTop:如果当前任务的顶部已存在该Activity的实例,则系统会调用该实例的
onNewIntent()
方法向其传送Intent,而不是创建Activity的新实例- singleTask:每次启动活动时系统会检查返回栈中是否存在该活动的实例,若存在,则把在这个活动之上的活动都出栈;若不存在,则创建新的任务和实例。
- singleInstance:启动另一个返回栈来管理这个活动;在这种模式下,使用一个单独的返回栈来管理这个活动,不管是哪个程序来访问这个活动,都是共用同一个返回栈,解决了共享活动实例的问题。
应用场景- standard:适合撰写邮件Activity或社交网络信息发布Activity。
- singleTop:适合搜索功能,每次搜索查询都会引导至SearchActivity查看结果。
- SingleTask:适合邮件客户端的收件箱等,因为它只需要保持一个实例即可。
- SingleInstance:适合多个应用共享一个活动实例的情况
2. Android中的异步机制
- 总体来说,其异步机制由Looper、Handler和MessageQueue三者组成
- 具体来说Android提供了HandlerThread(含有Looper的线程),以及使用其实现的IntentService(轻量级Service异步服务)和AsyncQueryHandler(提供ContentProvider使用)
- 以及AsyncTask实现异步耗时任务
3.ListView的优化
- 重用convertView:用以避免重复创建view,重复创建view代价比较大,而且如果重用view不改变宽高,重用view可以减少重新分配缓存造成的内存频繁分配/回收。RecycleBin机制
- 避免在getview中有重复调用findviewById:findviewById的实现是遍历,如果定义的view越复杂代价越大。推荐采用ViewHolder,然后保存在view的tag中。
- 设置view数据之前先对比数据是否有改变:一般来说,【比较两个数据的代价】远小于【View的重绘制的代价】。
- 避免在getview中直接加载Image或做耗时操作:用户在快速滑动列表时,会大量调用getview,而getview是在主线程中被调用的。推荐异步加载图片。
- ListView中元素尽量避免半透明:因为半透明绘制需要大量乘法计算。
- 尽量开启硬件加速。
4. 多进程通信
5. Crash与OOM
6. 重定向
Android 中重定向解决方法:
Client request:
GET /index.html HTTP/1.1
Host: www.example.com
Server response:
HTTP/1.1 302 Found
Location: http://www.redirected-address.example.com
如上为重定向返回的结果,我们可以通过getHeaderField("Location")
来获取到新的URL,然后再去查找结果。