0

私はローカルServiceActivity. Activityobject をに渡したいserviceので、Activityが my にバインドされているときServiceに function を呼び出すことができますactivty.doSomething()。やるべきですか?からBroadcastReceiverを呼び出すために使用できることはわかっていますが、上記のアイデアと比較して、どうするのが最善の方法ですか? ?に渡すか、使用しますか? みんなありがとう!doSomething()ServiceactivityserviceBroadcastReceiver

// This is MyActivity, where I will pass `activity` to `service` when `service` 
//  is bound or when activity is resumed. I will clear the `activity` object 
//  in `Service` when `Activity` is paused.
public class MyActivity extends Activity{

    LocalService mService; // this is my 

    @Override
    public void onResume(){
        if(isServiceBound){
            mService.setActivity(this);
        }
    }

    public void onPause(){
        if(isServiceBound){
            mService.setActivity(null);
        }
    }

    // Do something here
    public void doSomething(){
    }

    //Code to start, bind service, unbind ... go here

}

public class LocalService extends Service{
    MyActivity mActivity;
    public void setActivity(MyActivity a){
        mActivity = a;
    }
    // Start service, do something here
}
4

1 に答える 1

1

アクティビティをサービスにバインドすることは、双方向でリッチ API を実装できるため、ローカル サービスにとってより柔軟なオプションです。ここでドキュメントを確認してください

一方、BroadcastReceiver は、ジョブが終了するとすぐに有効期限が切れるため、インテント サービスに適したオプションです。

また、サービスを持続させたい場合は、startService で明示的に開始する必要があることにも注意してください。そうしないと、バインドされたアクティビティの数が 0 になるとサービスが強制終了されます。

于 2013-03-31T09:25:39.577 に答える