美文网首页
创建定时任务

创建定时任务

作者: 昨天剩下的一杯冷茶 | 来源:发表于2018-11-07 19:21 被阅读3次

    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秒会启动服务,服务启动是提示"你很帅!!!"

    相关文章

      网友评论

          本文标题:创建定时任务

          本文链接:https://www.haomeiwen.com/subject/deqbxqtx.html