java–Android:如何使用JobService的JobFinished

java–Android:如何使用JobService的JobFinished,第1张

概述我没有看到使用jobService的JobFinshed的例子,似乎我们必须跟踪一些条件遇到的变化我们必须调用jobFinished(),我是对的吗?解决方法:从另一个类(如IntentService)调用jobFinished()的难度似乎是获取类的实例,该实例扩展了JobService以用于调用jobFinished().您可以获取有关预定作业

我没有看到使用jobService的JobFinshed的例子,似乎我们必须跟踪一些条件遇到的变化我们必须调用jobFinished(),我是对的吗?

解决方法:

从另一个类(如IntentService)调用jobFinished()的难度似乎是获取类的实例,该实例扩展了JobService以用于调用jobFinished().您可以获取有关预定作业的信息,但不能获取有关JobService的信息(至少,我找不到方法).我可以想到三种方法来调用jobFinished().

如果您不关心您的工作是否成功,或者您的工作花费的时间很少.

在我的一个JobService课程中,我正在做定期工作.我并不担心处理失败.任务将很快再次执行.如果是这种情况,您可以这样做.

    public boolean onStartJob(JobParameters params) {        startService(new Intent(this, MyIntentServiceThatDoesTheWork.class));        // job not really finished here but we assume success & prevent backoff procedures, wakelocking, etc.        jobFinished(params, false);        return true;    }

如果您的工作足够短,那么这也是您想要的方式,在UI线程上执行它没有问题.在这种情况下,在onStartJob()中完成所有工作然后返回false.

使用broadcastReceiver将消息从IntentService发送到JobService(每个类的单独文件).

    // common Strings    public static final String IS_SUCCESS = "isSuccess";    public static final String MY_BC_RCVR = "MybroadcastRcvr";

你的JobService

    public class MyJobService extends JobService {        JobParameters mParams;        public boolean onStartJob(JobParameters params) {            mParams = params;            LocalbroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,                    new IntentFilter(MY_BC_RCVR));            startService(new Intent(this, MyIntentServiceThatDoesTheWork.class));            return true;        }        private broadcastReceiver mMessageReceiver = new broadcastReceiver() {            @OverrIDe            public voID onReceive(Context context, Intent intent) {                boolean isSuccess = false;                if(intent.hasExtra(IS_SUCCESS)) {                    isSuccess = intent.getBooleanExtra(IS_SUCCESS, false);                }                LocalbroadcastManager.getInstance(context).unregisterReceiver(this);                jobFinished(mParams, !isSuccess);            }        };    }

&安培;你的IntentService

    public class MyIntentServiceThatDoesTheWork extends IntentService {        @OverrIDe        protected voID onHandleIntent(Intent intent) {            boolean isSuccess = methodTodoAllMyWork();            Intent bcIntent = new Intent(MY_BC_RCVR);            bcIntent.putExtra(IS_SUCCESS, isSuccess);            LocalbroadcastManager.getInstance(this).sendbroadcast(bcIntent);        }    }

将您的工作线程类嵌套在JobService类中.

我已经从Google Developer Advocate给出了基于此Medium post(也由Arseny Levin引用)的AsyncTask示例,但也应该可以使用IntentService(请参阅此SO post以嵌套IntentService).

    public class MyJobService extends JobService {        JobParameters mParams;        public boolean onStartJob(JobParameters params) {            mParams = params;            new MyAsyncTaskThatDoesTheWork().execute();            return true;        }        private class MyAsyncTaskThatDoesTheWork extends AsyncTask<VoID, VoID, Boolean> {            @OverrIDe            protected Boolean doInBackground(VoID... params) {                return methodTodoAllMyWork();            }            @OverrIDe            protected voID onPostExecute(Boolean isSuccess) {                if(mParams != null) {                    jobFinished(mParams, !isSuccess);                }            }        }    }
总结

以上是内存溢出为你收集整理的java – Android:如何使用JobService的JobFinished全部内容,希望文章能够帮你解决java – Android:如何使用JobService的JobFinished所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1115195.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存