本案例知识是:后台执行定时任务。

Alarm机制:

一、创建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;public class LongRunningService extends Service {@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {new Thread(new Runnable() {@Overridepublic void run() {// 打印日志模拟耗时操作。System.out.println("服务启动时间:" + new Date().toString());}}).start();AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);int times = 1000 * 60;// 设置相隔多久启动一次广播,我设置为1分钟启动一次服务,去执行定时任务(虽然我写的是打印一条日志,看起来很无趣)long triggerAtime = SystemClock.elapsedRealtime() + times;// 设置触发时间点Intent i = new Intent(this, AlarmReceiver.class);// 服务启动广播的intent意图PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, i, 0);// 封装pendingIntent,启动广播接收者意图manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtime,pendingIntent);// 设置精确定时时间,定时到了触发,广播启动。return super.onStartCommand(intent, flags, startId);}}

二、创建要接收上述要启动的广播。

package com.example.servicebestpractice;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;public class AlarmReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {//服务类时间到启动广播这行这个方法Intent intent2 = new Intent(context, LongRunningService.class);context.startService(intent2);//启动广播做启动服务操作,服务又一次启动。//由于服务不再前台,因此不需要设置addFlags();方法。因为服务不再借助任务栈去创建了。}}

三、我们要有一个启动服务的入口,那就选择在主活动作为入口:

package com.example.servicebestpractice;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.Menu;public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //主活动要首先有一次启动服务的操作        Intent intent3 = new Intent(this, LongRunningService.class);        startService(intent3);//启动服务    }    }

四、广播、活动、服务三大组件记得去清单文件配置一下:

<activity            android:name="com.example.servicebestpractice.MainActivity"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <service android:name="com.example.servicebestpractice.LongRunningService" >        </service>        <receiver android:name="com.example.servicebestpractice.AlarmReceiver" >        </receiver>

写完这篇博客后,看了一下我的log后台输出如下截图:

每隔一分钟,定时任务完成,启动一次服务。



更多相关文章

  1. android客户端发送XML数据至服务器
  2. 把android平板USB上输出LOG方法
  3. [Android] 启动无线与网络设置的Action___android:duplicatePare
  4. Android(安卓)9.0 (P版本) SystemServer中的服务配置se linux权
  5. [zz] Android(安卓)Service 示例
  6. 手机壁纸设置相关
  7. 判断应用是安装还是卸载了
  8. android AnimationDrawable类实现动画效果
  9. Internal error. Please report to https://code.google.com/p/a

随机推荐

  1. Android(安卓)Log工具类
  2. ADT-20 问题 android support library
  3. Android仿支付宝支付密码输入框
  4. android 获取手机图片分享源码
  5. Android之仿心跳动画实现
  6. Android(安卓)ProgressBar ImageLoading
  7. android按钮点击的四种响应方式
  8. Android(安卓)温度传感器返回当前的温度
  9. Gradle build error, Error:Execution fa
  10. Android中的设计模式--建造者模式