为了将数据传回从服务活动,我来了解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");
}
}
永远不会在其他应用程序组件中的“Activity”中创建公共/静态方法或成员变量 - 它不会工作,也不是它的工作原理。请阅读http://developer.android.com/guide/components/fundamentals.html“活动”是一种“特殊情况”课程,旨在是独立的。尽量使用'ResultReceiver',绑定到'Service'或者使用'BroadcastReceiver',但不要假设你可以访问'Activity'的公共/静态成员。 – Squonk 2012-07-18 08:15:37
'私有静态MainActivity实例;'这将导致您的应用程序内存泄漏 – waqaslam 2012-07-18 08:41:58
谢谢大家,我使用了上面讨论的所有方法,但在知道这种方法在非常有名的VoIP应用[linphone](http:// www。 linphone.org)。现在很清楚。 – SohailAziz 2012-07-18 09:44:20