小米12月第四周工作记录 工作记录
小米12月第四周工作记录
12.21 IntentService 处理异步请求
这是一个基于消息的服务,每次启动该服务并不是马上处理你的工作,而是首先会创建对应的Looper,Handler并且在MessageQueue中添加的附带客户Intent的Message对象,当Looper发现有Message的时候接着得到Intent对象通过在onHandleIntent((Intent)msg.obj)中调用你的处理程序.处理完后即会停止自己的服务.意思是Intent的生命周期跟你的处理的任务是一致的.所以这个类用下载任务中非常好,下载任务结束后服务自身就会结束退出
IntentService:异步处理服务,新开一个线程:handlerThread在线程中发消息,然后接受处理完成后,会清理线程,并且关掉服务。
IntentService有以下特点:
(1) 它创建了一个独立的工作线程来处理所有的通过onStartCommand()传递给服务的intents。
(2) 创建了一个工作队列,来逐个发送intent给onHandleIntent()。
(3) 不需要主动调用stopSelft()来结束服务。因为,在所有的intent被处理完后,系统会自动关闭服务。
(4) 默认实现的onBind()返回null
(5) 默认实现的onStartCommand()的目的是将intent插入到工作队列中
1.服务不是单一的进程。服务没有自己的进程,应用程序可以不同,服务运行在相同的进程中。
2.服务不是线程。可以在线程中工作。
一.在应用中,如果是长时间的在后台运行,而且不需要交互的情况下,使用服务。
同样是在后台运行,不需要交互的情况下,如果只是完成某个任务,之后就不需要运行,而且可能是多个任务,需需要长时间运行的情况下使用线程。
二.如果任务占用CPU时间多,资源大的情况下,要使用线程。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent i = new Intent(this, MyService.class);
this.startService(i);//Service的onCreate里面也有一个Log,但是会是下面一行Log先打印,这就是坤哥著名理论,单线程异步
//原理是startService都是丢消息到消息队列中
Log.d("CSM", "onCreate Over");
}
实时监听通讯录变化 静态广播 动态广播 ContentObserver
12.22
adb root
adb pull /data/data/com.android.providers.contacts/databases/contacts2.db contact2.db
将系统通讯录拉过来看看 使用 navicat sqlite版进行查看
<!-- 读取联系人权限 -->
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<!-- 拨打电话权限 -->
<uses-permission android:name="android.permission.CALL_PHONE"/>
12.25
canvas clip剪切,能实现许多蒙层效果。但好像sdk版本太低不支持
Bitmap.createBitmap
可以剪切图片
12.27
将view通过canvas转成bitmap
Bitmap b = Bitmap.createBitmap(this.getWidth(), this.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(b);
view.draw(canvas);
12.28
问题:切图计算不正确,为什么我ImageLoader进来是720*1280,而实际mBitmap的大小却是920*1632. 坐标系需要重新换算
使用merge标签时虽然许多属性IDE都不提示,但是都可以用,只要你自己确保包裹他的ViewGroup都支持这些属性即可
12.30
android:descendantFocusability=”blocksDescendants” 致使listview中的子控件无法获得焦点,list中item可以点击
设置listview不可点击,listview.setEnable(false),但会有listview难以滑动的问题, 可以在其Adapter中覆盖public boolean isEnable(int position)来设定这一行是否可以点击;
Button不可点击也是这么设置
ListView的数据源也要在main线程更新,然后调用notifiDataSetChange();
12.31
使用命令查看 Activity栈信息 adb shell dumpsys activity | grep mFocusedActivity
blog comments powered by Disqus