当我启动JobIntentService
时,它可以正常工作,但是进入电话休眠状态后,它会在一段时间后挂起。解锁手机后,手机会再次开始工作。
我想在后台执行一个很长的任务,它必须不暂停或停止。
这是我的JobInteneService
:
public static void enqueueWork(Context context, Intent work) {
enqueueWork(context, ExampleJob.class, 1, work);
}
@Override
public void onCreate() {
Log.d(TAG, "onCreate() called");
super.onCreate();
}
@Override
protected void onHandleWork(@NonNull Intent intent)
{
cancelRingtone = Uri.parse("android.resource://com.example.myapplication/" + R.raw.cancel);
cancelAlarm = RingtoneManager.getRingtone(this, cancelRingtone);
while(running)
{
cancelAlarm.play();
try
{
Thread.sleep(60000);
}
catch (Exception e)
{
Log.i(TAG, "onHandleWork: "+e);
running=false;
}
}
}
@Override
public void onDestroy() {
Log.d(TAG, "onDestroy() called");
super.onDestroy();
}
这里是MainActivity
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActivityCompat.requestPermissions(this,new String[]{
Manifest.permission.WAKE_LOCK
}, 1);
}
public void click(View view)
{
Intent mIntent = new Intent(this, ExampleJob.class);
ExampleJob.enqueueWork(this, mIntent);
}
这里是AndroidManifest.xml
:
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".ExampleJob"
android:permission="android.permission.BIND_JOB_SERVICE"/>
</application>
使用此代码,我的手机将每分钟播放一次哔声。在电话睡眠模式下,我半小时内最多计数6次哔声。
我是否正确实施了JobIntentService
?
如果不是JobIntentService
用于该工作,我还应该使用什么?