1

サービスからアクティビティにデータを戻すために、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");
    }

}
4

1 に答える 1

2

短所:

  • アクティビティには複数のインスタンスが存在する可能性があり、アプローチでは最後に作成されたものだけが結果を取得します。
  • 結果が配信されたときに表示/使用できる場合とできない場合があります。
  • サービスはUI(アクティビティ)に直接依存します。

より良いアプローチは、アクティビティに何らかのインターフェイス(たとえばDataHandler)を実装させ、それをサービスに直接結合しないことです。さらに、実際に何かを実行できる場合にのみデータを受信するようにするには、アクティビティをハンドラーとして登録し、onStart()登録を解除しonStop()ます。

于 2012-07-18T07:52:42.087 に答える