5

JobService でコンテキストを必要とするバックグラウンド作業を行う必要があります (API 16 以降をサポートしているため、Firebase JobDispatcher を使用しています) JobService と AsyncTasks に関する多くの記事を読みましたが、見つかりませんコンテキストが必要な場合にそれらを組み合わせる方法に関する良い記事。

私の仕事サービス

import com.firebase.jobdispatcher.JobParameters;
import com.firebase.jobdispatcher.JobService;

public class AsyncJobService extends JobService {

    @Override
    public boolean onStartJob(JobParameters job) {
        new AsyncWork(this, job).execute();
        return true;
    }

    @Override
    public boolean onStopJob(JobParameters job) {
        return false;
    }
}

私の非同期タスク

import android.os.AsyncTask;
import com.firebase.jobdispatcher.JobParameters;
import com.firebase.jobdispatcher.JobService;

class AsyncWork extends AsyncTask<Void, Void, Void> {

    private JobService jobService;

    private JobParameters job;

    AsyncWork(JobService jobService, JobParameters job) {
        this.jobService = jobService;
        this.job = job;
    }

    @Override
    protected Void doInBackground(Void... voids) {
        // some work that needs context
        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        // some work that needs context
        jobService.jobFinished(job, false);
    }
}

これにより、AsyncWork クラスの jobService プロパティがコンテキスト オブジェクトをリークしているという警告が表示されます。Activity または Fragment を渡した場合にこれが当てはまる理由は理解していますが、これは jobFinished() を呼び出すまで存在するはずの JobService です。何か間違ったことをしていますか、それとも警告を無視できますか?

4

2 に答える 2