精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-03-11
在前两篇文章中,我们了解了SMSPopup的概况 及研究了目录结构和Mainfest文件 ,现在我们深入代码,来看看SMSPopup的具体实现。 SMSPopupConfigActivity
SMSPopupUtilsService
@Override public void onCreate() { HandlerThread thread = new HandlerThread(Log.LOGTAG, Process.THREAD_PRIORITY_BACKGROUND); thread.start(); context = getApplicationContext(); mServiceLooper = thread.getLooper(); mServiceHandler = new ServiceHandler(mServiceLooper); } @Override public void onStart(Intent intent, int startId) { //mResultCode = intent.getIntExtra("result", 0); Message msg = mServiceHandler.obtainMessage(); msg.arg1 = startId; msg.obj = intent; mServiceHandler.sendMessage(msg); }
此类继承了Service(后台服务),在onCreate()方法中,首先定义了一个HandlerThread,为ServiceHandler的创建准备Looper,Looper是MessageQueue和Handler之间的桥梁,具体参见上面的文章。再看onStart()方法,构造了一条Message,包含了一个intent对象,改intent来自于SMSPopupUtils调用startService(intent),intent中包含了一条SmsMmsMessage(短信实体)和Action(标志将短信设为已读的动作)。最后一句mServiceHandler.sendMessage(msg)执行完成后,Message就被转到Handler处理 private final class ServiceHandler extends Handler { public ServiceHandler(Looper looper) { super(looper); } @Override public void handleMessage(Message msg) { Log.v("SMSPopupUtilsService: handleMessage()"); int serviceId = msg.arg1; Intent intent = (Intent) msg.obj; String action = intent.getAction(); if (ACTION_MARK_THREAD_READ.equals(action)) { Log.v("SMSPopupUtilsService: marking thread read"); SmsMmsMessage message = new SmsMmsMessage( context, intent.getExtras()); message.setThreadRead(); } else if (ACTION_OTHER.equals(action)) { } finishStartingService(SMSPopupUtilsService.this, serviceId); } }
if (ACTION_MARK_THREAD_READ.equals(action)) { if (Log.DEBUG) Log.v("SMSPopupUtilsService: Marking thread read"); SmsMmsMessage message = new SmsMmsMessage(context, intent.getExtras()); message.setThreadRead(); } else if (ACTION_MARK_MESSAGE_READ.equals(action)) { if (Log.DEBUG) Log.v("SMSPopupUtilsService: Marking message read"); SmsMmsMessage message = new SmsMmsMessage(context, intent.getExtras()); message.setMessageRead(); } else if (ACTION_DELETE_MESSAGE.equals(action)) { if (Log.DEBUG) Log.v("SMSPopupUtilsService: Deleting message"); SmsMmsMessage message = new SmsMmsMessage(context, intent.getExtras()); message.delete(); } else if (ACTION_QUICKREPLY.equals(action)) { if (Log.DEBUG) Log.v("SMSPopupUtilsService: Quick Reply to message"); SmsMmsMessage message = new SmsMmsMessage(context, intent.getExtras()); message.replyToMessage(intent.getStringExtra( SmsMmsMessage.EXTRAS_QUICKREPLY)); } else if (ACTION_UPDATE_NOTIFICATION.equals(action)) { if (Log.DEBUG) Log.v("SMSPopupUtilsService: Updating notification"); updateNotification(intent); } 请注意前两个判断,完全相同,也就是如果符合第一个条件,if里面的代码或执行两边,也就是将信息两次置为已读,完全多余,看了一下最新版本,代码还是如此。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 5564 次