作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Uri uriSMSURI = Uri.parse("content://sms/inbox");
Cursor cur = getContentResolver().query(uriSMSURI, null, null, null,null);
int i=0;
while (cur.moveToNext()) {
Phone_no=cur.getString(2);
Time=cur.getLong(4);
Message_body=cur.getString(11);
Date dateObj = new Date(Time);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd:HH:mm:ss");
String Timenew = df.format(dateObj);
Log.d(Tag,"INSIDE OF READ SMS INBOX");
service.setClass(getBaseContext(), Background_Service.class);
service.putExtra("Phone_no", Phone_no);
service.putExtra("Message_body", Message_body);
service.putExtra("Timenew", Timenew);
getBaseContext().startService(service);
}
以上代码从收件箱中读取消息。然后我将这些消息发送到服务以进行进一步处理。这是正确的做法吗?我应该为服务执行创建一个队列吗?如果是的话,如何创建,为上面的代码实现一个队列。
最佳答案
是的,这是适用的方式。但是,我更喜欢另一个。
您可以创建一次服务并绑定(bind)到它,然后向它发送 Message
,而不是启动一个新服务并将新 Intent 路由到它。
首先,您需要一个消息传递协议(protocol)。最简单的方法是创建具有相似内容的 AIDL 文件。
package org.your.pkg;
interface IBackgroundService {
void queueMsg(String phoneNo, String msgBody, String timeNew);
}
然后,您必须在您的服务中实现它。
class BackgroundService extends Service {
IBackgroundService.Stub binder = new IBackgroundService.Stub() {
public void queueMsg(String phoneNo, String msgBody, String timeNew) {
// enqueue message to service thread. Do not process msg in this method.
}
};
public IBinder getBinder() {
return binder;
}
}
然后,您必须连接到您的服务。
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
IBackgroundService yourService = IBackgroundService.Stub.asInterface(service);
// calls to yourService.queueMsg(...)
}
public void onServiceDisconnected(ComponentName className) {
Log.e(TAG, "Service has unexpectedly disconnected");
}
};
this 上还有更多内容主题。
关于java - 如何在android中创建队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11761251/
我是一名优秀的程序员,十分优秀!