为了将数据从服务传回 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/