将数据传回服务中的活动

时间:2012-07-18 07:41:28

标签: android service android-activity intentservice

为了将数据传回服务活动,我开始了解 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");
    }

}

1 个答案:

答案 0 :(得分:2)

缺点:

  • 可以有多个活动实例,只有最后创建的实例才能获得结果。
  • 在交付结果时可能会或可能不会显示/可用。
  • 您的服务将直接取决于您的用户界面(活动)。

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