3 回答
TA贡献1816条经验 获得超6个赞
Android 提供了 JobService 类,您可以在其中从 JobScheduler 类中调度 JobService。JobScheduler 在后台运行该服务,您可以继续登录。您可以在此处找到一个 Xamarin 示例:https : //blog.xamarin.com/replacing-services-jobs-android-oreo-8-0/
创建一个 JobService 类并在 OnStartJob 函数中添加您的 InsertPushKeys 代码。确保在新线程上启动它。
OnStartJob(JobParameters parameters){
new Thread(new Runnable() {
public void run() {
await InsertPushKeys();
}
}).start();
}
现在使用 JobInfo 类构建作业,如上面的链接所示:
ComponentName componentName = new ComponentName(this, MyJobService.class);
JobInfo jobInfo = new JobInfo.Builder(12, componentName)
.setRequiresCharging(true)
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
.build();
最后,您可以安排您的工作,它将由 android 执行。
JobScheduler jobScheduler = (JobScheduler)getSystemService(JOB_SCHEDULER_SERVICE);
int resultCode = jobScheduler.schedule(jobInfo);
if (resultCode == JobScheduler.RESULT_SUCCESS) {
Console.WriteLine(TAG, "Job scheduled!");
} else {
Console.WriteLine(TAG, "Job not scheduled");
}
确保在不同的线程上运行任务。
TA贡献1873条经验 获得超9个赞
这就是你要找的。服务是 Android 框架提供的一种构造,可以完全满足您的需求。欲了解更多信息,请检查 -
http://www.vogella.com/tutorials/AndroidServices/article.html
TLDR:把你的API调用内部服务的onCreate()
,并return START_STICKY
从它onStartCommand()
。不要忘记调用startService()
服务的实例。
TA贡献1824条经验 获得超6个赞
在Task.Run不使用 await 关键字的情况下在内部调用您的服务。Await 持有控制权,直到它完成完全执行。它可能会警告您使用 await 关键字,但您可以忽略它。
Task.Run(async () =>
{
InsertPushKeys();
});
& 不要.Wait()在方法结束时尝试使用(直到你需要它),它会阻止你的执行。
- 3 回答
- 0 关注
- 575 浏览
添加回答
举报