创建定时任务

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 注册服务


image.png

效果:
每5秒会启动服务,服务启动是提示"你很帅!!!"

你可能感兴趣的:(创建定时任务)