android - 将数据从服务传回 Activity

标签 android service android-activity intentservice

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

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");
    }

}

最佳答案

缺点:

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

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

关于android - 将数据从服务传回 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11536528/

相关文章:

c# - 如何将 WCF 服务添加到现有的 winforms 应用程序?

service - 应用程序阻止调用 O365 发现服务

c# - 创建txt文件无法访问其他进程正在使用的文件

android - 在 Android Studio 中使用非生产 Activity 进行测试

android - 使用 Fragment 时相机预览不会填满整个屏幕

java - Firebase 获取 child 的 child 的引用

android - 在android中使用加速度计计算步数

java - Android - 如何使用 ActionBar 在 Fragment 之间导航

java - 使用 ACTION_SEND Intent 时,Facebook 在 Android 上剪辑文本

java - 提交给执行者的 FutureTask 不运行