使用监听器在Android服务和活动之间进行通信

时间:2013-09-07 15:27:50

标签: android service android-activity communication

我看到的活动和服务之间通信的大多数示例都使用BroadcastReceiver。我的问题是我可以用普通的监听器替换广播接收器吗?然后我不必担心将我的Web服务响应编组到Intent / Bundle类中。这种方法有什么问题吗?什么比使用BroadcastReceiver更不利?将在Activity的onCreate方法上调用AddListener,并在Activity的onDestroy方法中调用RemoveListener。

package com.example.test;

import java.util.ArrayList;
import java.util.List;

import android.app.IntentService;
import android.content.Intent;

public class AsyncService extends IntentService
{
    static List<WebServiceListener> listeners = new ArrayList<WebServiceListener>();

    public static void addListener(WebServiceListener listener)
    {
        listeners.add(listener);
    }

    public static void removeListener(WebServiceListener listener)
    {
        listeners.remove(listener);
    }

    public AsyncService(String name)
    {
        super(name);
    }

    @Override
    protected void onHandleIntent(Intent intent)
    {
        try
        {
            Thread.sleep(5000); //simulate calling webservice
        }
        catch (Exception e)
        {
            //
        }

        WebServiceResponse response = new WebServiceResponse();
        response.status = "SUCCESS";

        for (WebServiceListener listener : listeners)
        {
            listener.onReceiveResult(response);
        }
    }
}

1 个答案:

答案 0 :(得分:4)

如果是本地服务,是的,你可以这样做