1

为了将数据从服务传回活动,我开始了解ResultReceiver广播/本地广播绑定服务。但是我对这种方法感到困惑:如果我们简单地调用活动静态公共函数来传递一些东西,那么这种方法的优缺点是什么。说我有活动:

public interface ListenerInterface {

    void DataExchange(String data);


}
public class MainActivity extends Activity implements ListenerInterface{

    private static MainActivity instance;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        instance=this;

        Intent i=new Intent();
        i.setClass(this, MyService.class);
        startService(i);
    }

    public static MainActivity getInstance(){
        if(instance!=null)
            return instance;

        return null;
    }

    @Override
public void DataExchange(String data) {
    // TODO Auto-generated method stub
    Log.d("sohail","data received="+data);
}

}

和一个 IntentService:

public class MyService extends IntentService{

    MainActivity obj;
    public MyService() {
        super("MyService");
        // TODO Auto-generated constructor stub
    }

    @Override
    protected void onHandleIntent(Intent arg0) {
        // TODO Auto-generated method stub

        MainActivity.getInstance().DataExchange("Service Data");
    }

}
4

1 回答 1

2

缺点:

  • 一个活动可以有多个实例,使用您的方法,只有最后创建的一个会得到结果。
  • 交付结果时,它可能可见/可用,也可能不可见/可用。
  • 您的服务将直接取决于您的 UI(活动)。

更好的方法是让活动实现一些接口(例如DataHandler),而不是将其直接耦合到服务。此外,为确保仅在您可以实际使用数据时接收数据,请将活动注册为处理程序onStart()并取消注册onStop()

于 2012-07-18T07:52:42.087 回答