public class DismissAllAlarmsService extends IntentService {
@Override public void onHandleIntent(Intent unusedIntent) {
ContentResolver resolver = getContentResolver();
...
resolver.update(uri, values, selection, null);
}
}
in AlertReceiver extends BroadcastReceiver, onReceive(): (main thread)
Intent intent = new Intent(context, DismissAllAlarmsService.class);
context.startService(intent);其它技巧
1、当启动AsyncTask的时候,立刻disable UI元素(按钮等等)。
2、显示一些动画,表示在处理中
3、使用进度条对话框
4、使用一个定时器作为耗时警告,在AsyncTask开始时启动定时器,在AsyncTask的onPostExecute方法中取消定时器。
5、当不确定要耗时多久的时候,组合使用上述所有方法
总结
离开主线程!
磁盘和网络操作不是马上就能完的
了解sqlite在干嘛
进度展示很好
PS,在视频讲座中,作者还提到,Chrome团队为了避免Jank(响应超时而死掉),几乎所有的功能和任务都会在子线程里面去做。这一点也值得在Android中借鉴。