Android中的定时任务一般有两种实现方式,一种是使用Java API里提供的Timer类,一种是使用Android的Alarm机制。这两种方式在多数情况下都能实现类似的效果,但是Timer有一个明显的短板,它并不太适用于那些需要长期在后台运行的定时任务。我们都知道,为了能让电池更加耐用 ,每种手机都会有自己的休眠策略,Android手机就会在长时间不操作的情况下自动让CPU进入睡眠状态,这就有可能导致Timer中的定时任务无法正常运行。而Alarm则具有唤醒CPU的功能,它可以保证在大多数情况下需要执行定时任务的时候CPU都能正常工作。
创建一个LongRunningService的类,并继承Service
package com.example.hzx.longrunningservice;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.SystemClock;
import android.support.annotation.Nullable;
import android.util.Log;
import android.widget.Toast;
/**
* Created by hzx on 2018/11/7.
*/
public class LongRunningService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
public int onStartCommand(Intent intent,int flags,int startId){
Log.d("123","LongRunningService onStartCommand");
AlarmManager manager = (AlarmManager)getSystemService(ALARM_SERVICE);
int anHour = 5*1000;
long triggerAtTime = SystemClock.elapsedRealtime() + anHour;
Intent i = new Intent(this,LongRunningService.class);
PendingIntent pi = PendingIntent.getService(this,0,i,0);
manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,triggerAtTime,pi);
Toast.makeText(this,"你很帅!!!",Toast.LENGTH_SHORT).show();;
return super.onStartCommand(intent,flags,startId);
}
}
MainActivity
package com.example.hzx.longrunningservice;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("123","MainActivity onCreate");
Intent intent = new Intent(this,LongRunningService.class);
this.startService(intent);
}
}
注意:
1、 需要在AndroidMainifest.xml 注册服务
<service android:name=".LongRunningService"/>
image.png
效果:
每5秒会启动服务,服务启动是提示"你很帅!!!"
网友评论