zoukankan      html  css  js  c++  java
  • 服务的最佳实践——后台执行的定时任务

    创建一个ServiceBestPractice项目,然后新增一个LongRunningService类,代码如下所示:

    package com.example.servicebestpractice;
    
    
    import java.util.Date;
    
    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.util.Log;
    
    public class LongRunningService extends Service{
    
        @Override
        public IBinder onBind(Intent intent) {
            // TODO Auto-generated method stub
            return null;
        }
        
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    Log.d("LongRunningService", "executed at " + new Date().toString());
                }
            }).start();
            AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
            int anHour = 60 * 60 * 1000;  //这是一小时的毫秒数
            long triggerAtTime = SystemClock.elapsedRealtime() + anHour;
            Intent i = new Intent(this, AlarmReceiver.class);
            PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);
            manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, pi);
            return super.onStartCommand(intent, flags, startId);
        }
    
    }

    新建一个AlarmReceiver类,并让它继承自BroadcastReceiver,代码如下所示:

    package com.example.servicebestpractice;
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    
    public class AlarmReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            Intent i = new Intent(context, LongRunningService.class);
            context.startService(i);
        }
    
    }

    接下来我们需要在打开程序的时候启动一次LongRunningService,修改mainActivity中的代码,如下所示:

    package com.example.servicebestpractice;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    
    
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Intent i = new Intent(this, LongRunningService.class);
            startService(i);
        }
    
    }

    最后别忘了,我们用到的广播接收器和服务都要在AndroidManifest.xml中注册才行,代码如下所示:

            <service android:name=".LongRunningService">
            </service>
            <receiver android:name=".AlarmReceiver">
            </receiver>
  • 相关阅读:
    【净界法师】【唯识三十颂05】《唯识三十颂》,什么是唯识呢?
    再谈呼吸调匀、全身放松之重要性
    何时该修十善,何时该念佛
    如何降服贪心
    用内观法切断欲望有何弊病
    洛桑陀美上师开示 | 如何遮止并断除贪爱?
    断除贪爱执着,才可以超越一切局限
    【佛子行浅释】逢遇悦意对境时, 视如夏季之彩虹, 虽显美妙然无实, 断除贪执佛子行。
    佛弟子如何断除对异性的贪爱与相思?益西彭措堪布超级精彩开示
    感人!北大博士出家前写给父母的信
  • 原文地址:https://www.cnblogs.com/happyhacking/p/4220154.html
Copyright © 2011-2022 走看看