0

アプリケーションにローカル サービスがあり、asynctask でネットワーク操作を行います。

私のアプリケーションには、アクティビティ A とアクティビティ B の 2 つのアクティビティがあります。

私のサービスのライフサイクルと活動はこのようなものです。

In activity A:
1)stop service(in oncreate)

In activity B:
1)start service(in oncreate)
2)bindservice(in oncreate)
3)unbind service(in on destroy)

In service:
1)start download in async task(in oncreate)
2)stop async task(in ondestroy)

しかし、サービスは実行され続けています。何か足りないものはありますか? ありがとう

FIX:
i need to stop the async task before i call stopService. As the service is busy with asyn task, it will ignore my my stop requests.
1)send a msg to service in intent extra, to stop async task.
2)then call stop service 
4

1 に答える 1

0

すべての bindService() 呼び出しに対応する unbindService() 呼び出しが行われた後、サービスはシャットダウンします。バインドされたクライアントがない場合、誰かがサービスで startService() を呼び出した場合にのみ、サービスは stopService() も必要になります。したがって、 Activity Bで Activity B で
開始したサービスを停止するには、 stopService() を呼び出す必要があります。 あなたのコメントを読んだ後、以下はあなたのために仕事をすることができます. サービスをバインドする必要はありません。1)start service(in oncreate)onDestroy

public class DownloadService extends Service {


    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        new DownloadTask().execute();

        return START_STICKY;
    }

    @Override
    public IBinder onBind(Intent arg0) {

        return null;
    }

    @Override
    public void onDestroy() {
        Log.i(TAG, "Service destroyed!");
    }


    public class DownloadTask extends AsyncTask<String, Void, String>{

        @Override
        protected String doInBackground(String... params) {
            // download here
            return null;
        }

        @Override
        protected void onPostExecute(String result) {

            }
    }

}

ここから、アクティビティ A で stopService を、アクティビティ B で startActivity を実行します。

于 2013-05-29T05:52:11.993 に答える