使用BroadcastReceiver&的服务的正确方法LocalBroadcastManager

时间:2015-08-05 07:41:18

标签: android service broadcastreceiver

我不确定我当前的方法是否是使用服务的正确方法:我想在后台监听LocalBroadcastManager(不涉及Activity)并在收到Intent时查询一些WebServices。你能不能看看我下面的代码,告诉我这是不是"好"或者"坏"关于强大的代码设计?当然,我希望将设备资源利用率降至最低。

最初,我脑子里有一个IntentService但是我没有弄清楚如何从BroadcastReceiver启动它(如果它只是监听LocalBroadcasts,你就不能在清单中注册一个BroadcastReceiver)。

public class WebRequestService extends Service {

@Override
public void onCreate() {        
    BroadcastReceiver mLocalMessageReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            new getCurrentValues().execute();
        }
    };

    IntentFilter messageFilter = new IntentFilter(Intent.ACTION_SEND);
    LocalBroadcastManager.getInstance(this).registerReceiver(mLocalMessageReceiver, messageFilter);
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    return START_STICKY;
}

@Override
public void onDestroy() {}

@Nullable
@Override
public IBinder onBind(Intent intent) {
    return null;
}

private class getCurrentValues extends AsyncTask<Void, Void, ResultDTO> {

    @Override
    protected ResultDTO doInBackground(Void... params) {
      // do some magic
        return resultDTO;
    }

    protected void onPostExecute(ResultDTO result) {
        if (result != null) {
          Intent messageIntent = new Intent();
          messageIntent.setAction("currentValuesUpdated");
          messageIntent.putExtra("result", result);
          LocalBroadcastManager.getInstance(this).sendBroadcast(messageIntent);
        }
    }
} }

非常感谢

0 个答案:

没有答案