- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
实际上,我想使用 JobScheduler 来通知应用程序是否处于 Activity 状态。我是 android 的新手,首先只是试图运行后台 AsyncTask 来检查它是否工作正常但它不工作。
这是我的 JobService 代码:
public class JobSchedularClass extends JobService {
private static final String TAG = "JobSchedularClass";
private BackgroundJob backgroundJob;
@Override
public boolean onStartJob(final JobParameters params) {
Log.d(TAG, "onStartJob: ");
backgroundJob=new BackgroundJob(){
@Override
protected void onPostExecute(String s) {
Toast.makeText(getApplicationContext(),s+"kjk",Toast.LENGTH_SHORT).show();
jobFinished(params,false);
}
};
backgroundJob.execute();
return true;
}
@Override
public boolean onStopJob(JobParameters params) {
Log.d(TAG, "onStopJob: ");
backgroundJob.cancel(true);
return false;
}
}
异步任务类:
public class BackgroundJob extends AsyncTask<Void,Void,String> {
private static final String TAG = "BackgroundJob";
@Override
protected String doInBackground(Void... voids) {
Log.d(TAG, "doInBackground: ");
return "BackGround Job is running";
}
}
主要 Activity 代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ComponentName componentName=new ComponentName(MainActivity.this,JobSchedularClass.class);
jobInfo =new JobInfo.Builder(code,componentName)
.setPeriodic(5000)
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
.setPersisted(true)
.build();
jobScheduler=(JobScheduler)getSystemService(JOB_SCHEDULER_SERVICE);
}
public void Startjob(View view) {
int code_result= jobScheduler.schedule(jobInfo);
Toast.makeText(this," Job scheduling...",Toast.LENGTH_SHORT).show();
if(code_result==JobScheduler.RESULT_SUCCESS){
Toast.makeText(this," Job scheduling done...",Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(this," Job scheduling failed...",Toast.LENGTH_SHORT).show();
}
}
public void Stopjob(View view) {
jobScheduler.cancel(code);
Toast.makeText(this," Job cancel...",Toast.LENGTH_SHORT).show();
}
这是 list 权限和服务注册代码:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<service android:name=".JobSchedularClass"
android:permission="android.permission.BIND_JOB_SERVICE"
android:exported="true"
/>
注意:我按要求使用 API 21。请指导我哪里出错了。提前致谢
最佳答案
Android 版本 < N 上的 setPeriodic()
存在一些问题(尽管我没有问题的官方链接)。您需要使用 setMinimuLatency()
使其适用于所有版本
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
jobInfo = new JobInfo.Builder(id, name)
.setMinimumLatency(5000)
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
.setPersisted(true)
.build();
} else {
jobInfo = new JobInfo.Builder(id, name)
.setPeriodic(5000)
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
.setPersisted(true)
.build();
}
working fine but time is taking longer than 5 second to execute again
基于 setMinimumLatency() 的文档:
Milliseconds before which this job will not be considered for execution
基于 setPeriodic() 的文档:
You have no control over when within this interval this job will be executed, only the guarantee that it will be executed at most once within this interval
总的来说,您无法控制计划的作业何时执行。系统将决定何时执行它。
In my code I want to check and send FCM notification after every 5 minutes even app is active or not
这样做不是一个好主意。当打瞌睡模式启动时,您永远无法保证每 5 分钟就能成功执行一次任务。
虽然有创建前台服务或每 5 分钟触发一次 AlarmManager 等替代方法,但这些方法会耗尽电池电量。
您可以改为降低通知服务器的频率。让我们说一天中每 2 小时或两次。但是使用 JobScheduler 您将无法确定确切的时间。如果您的要求是准确的时间,那么请选择 AlarmManager。引用this link检查它是如何实现的
关于android - onStartJob 和 onStopJob 在 android 中无法运行后台线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50099403/
我在去电或来电时开始工作 Bundle bundle = new Bundle(); bundle.putString("MobileNumber", number); bundle
我在我的项目中使用了 FirebaseJobDispatcher。这是示例代码。 public class MyCustomDispatcher extends JobService { @O
我正在尝试实现我的第一个 JobService。我知道对 onStartJob 的调用实际上是有保证的(是的,如果我指定一些没有过期时间的离谱要求,会有一些优势)。但是 onStopJob 怎么样?是
实际上,我想使用 JobScheduler 来通知应用程序是否处于 Activity 状态。我是 android 的新手,首先只是试图运行后台 AsyncTask 来检查它是否工作正常但它不工作。 这
我有一个预定的工作实现如下: class RefreshImageService : JobService() { override fun onStartJob(params: JobPar
我是一名优秀的程序员,十分优秀!