长期后台运行 Service
来源:互联网 发布:xp软件下载 编辑:程序博客网 时间:2024/04/28 05:45
* 从 Android 4.4 版本开始,Alarm 任务的触发时间将会变得不准确,有可能会延迟一段时间后任务才能得到执行这并不是个 bug,而是系统在耗电性方面进行的优化。 系统会自动检测目前有多少 Alarm 任务存在,然后将触发时间将近的几个任务放在一起执行, 这就可以大幅度地减少 CPU 被唤醒的次数,从而有效延长电池的使用时间。 如果你要求 Alarm 任务的执行时间必须准备无误,Android 仍然提供了解决方案。 使用 AlarmManager 的 setExact()方法来替代 set()方法,就可以保证任务准时执行了*
package com.gao.servicetest;import android.annotation.TargetApi;import android.app.AlarmManager;import android.app.PendingIntent;import android.app.Service;import android.content.Intent;import android.os.Build;import android.os.IBinder;import android.os.SystemClock;import android.util.Log;import java.util.Date;/** * 长期后台运行的 服务在 onStartCommand()方法里开启了一个子线程, 然后在子线程里就可以执行具体的逻辑操作了。这里简单起见,只是打印了一下当前的时间。创建线程之后的代码就是使用 Alarm了,先是获取到了AlarmManager 的实例,然后定义任务的触发时间为一小时后,再使用 PendingIntent 指定处理定时任务的广播接收器为 AlarmReceiver,最后调用 set()方法完成设定。 */public class LongRunningService extends Service { public LongRunningService() { } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. throw new UnsupportedOperationException("Not yet implemented"); } @TargetApi(Build.VERSION_CODES.KITKAT) @Override public int onStartCommand(Intent intent, int flags, int startId) { new Thread(){ @Override public void run() { super.run(); Log.d("LongRunningService", "打印时间: " + new Date().toString()); } }.start(); AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); int time = 5*1000; //这是间隔时间的 毫秒值 long triggerAtTime = SystemClock.elapsedRealtime()+time; Intent mIntent = new Intent(this,AlarmReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(this,0,mIntent,0); alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP,triggerAtTime,pendingIntent); return super.onStartCommand(intent, flags, startId); }}
AlarmReceiver 类,并让它继承自 BroadcastReceiver
创建 Intent 对象,然后去启动LongRunningService 这个服务
package com.gao.servicetest;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;public class AlarmReceiver extends BroadcastReceiver { public AlarmReceiver() { } @Override public void onReceive(Context context, Intent intent) { Intent intent1 = new Intent(context,LongRunningService.class); context.startService(intent1); }}
需要在打开程序的时候启动一次LongRunningService,之后 LongRunningService 就可以一直运行了
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Intent intent = new Intent(this, LongRunningService.class);startService(intent);}}
0 0
- 长期后台运行 Service
- Service在后台长期运行的解决方案
- 混合调用Service(Service既能后台长期运行,又能调用Service中方法)
- 使APP长期后台运行
- iOS 程序退到后台长期运行
- 如何保持service长期在后台运行
- android-APP长期运行于后台,重启后如何避免异常
- iOS 低功耗蓝牙 在后台长期运行的解决方案
- android-APP长期运行于后台,重启后如何避免异常
- Android APP长期运行于后台,重启后如何避免异常
- 后台长期运行进程的三种方式
- 如何既要让Service长期的在后台运行,又要调用Service里面的方法
- 程序进入后台后可以运行时间的调整-----长期在后台运行
- Service使用 一直运行的后台服务
- Android 启动后台运行程序(Service)
- Android 启动后台运行程序(Service)
- Android 四大组件之一:Service 后台运行
- Android判断后台服务(Service)是否运行
- 安卓传递对象之Serializable
- 229. Majority Element II 找出出现超过一定数量的元素
- DockerJava+Tomcat环境搭建
- 大数据技术Hadoop面试题,看看你能答对多少?
- 瀑布流布局
- 长期后台运行 Service
- Eclipse提交代码错误:rejected –non-fast-forward解决方法
- Swift - 触摸事件(点击,移动,抬起等)说明及用例
- [leetcode]95. Unique Binary Search Trees II
- Android面试之JVM
- 滚动 CSS3 鼠标滚轮滚动插件jQuery Smoove.js
- 容器的功能扩展(一)
- 有一个做饭好吃的妈妈是一种什么体验?
- cos和sin的傅立叶变换