의 서비스에서의 활동에 다시 데이터를 전달하기 위해, 나는 약 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");
}
}
다른 응용 프로그램 구성 요소에서 액세스하려는 "활동"에 공개/정적 메서드 또는 멤버 변수를 절대 생성하지 마십시오. 작동하지 않으며 작동 방법이 아닙니다. http://developer.android.com/guide/components/fundamentals.html을 읽어주십시오. '활동'은 '특수 사례'클래스이며 독립적이어야합니다. 'ResultReceiver'를 사용하여'Service'에 바인딩하거나'BroadcastReceiver'를 꼭 사용하십시오. 그러나 결코'Activity'의 public/static 멤버에 접근 할 수 있다고 가정하지 마십시오. – Squonk
'private static MainActivity instance; 이것은 응용 프로그램에서 메모리 누출을 일으킬 것입니다. – waqaslam
모두에게 감사드립니다. 위에서 언급 한 모든 접근법을 사용했지만 매우 유명한 VoIP 응용 프로그램 [linphone] (http : // www. linphone.org). 지금은 분명합니다. – SohailAziz