java - 如何在android中创建队列?

标签 java android service

        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/

相关文章:

java - 如何在 javax.ws.rs.core.Response 中设置 Response body

android - 如何解决 Android Studio 找不到项目 list 文件的错误?

c# - 将多维数组数据从 C# webservice 返回到 vba

Java 不断跳过我的扫描仪对象

java - 有没有办法在 Java 中访问 SOL_TCP(又名 IPPROTO_TCP)套接字选项(例如 TCP_KEEPIDLE)?

java - 创建圆柱体类

Android NDK 尝试使用 sdk/ndk-bundle/sources/cxx-STL/gnu-libstdc++ 进行构建/但 gnu-libstdc++ 不存在

android - 使用名称中的当前日期和时间将图像保存到 sd 不起作用

Android 服务 - 从设置 App 停止服务

service - 在使用Pod之前是否有kubernetes配置参数(服务,rc或其他)要延迟