导航:首页 > 操作系统 > android后台定时任务

android后台定时任务

发布时间:2023-06-01 15:34:22

android8 后台定时提醒通知

个推文档要求必须声明一个名为pushservice的后台进程,亲测应用被杀后依然存活,但系统重启无效。

在后台进程中创建一个定时器,我这里使用的是Rxjava,创建了一个每隔1分钟就执行一次的定时任务。

需要注意的是,这里创建的是一个后台 进程,进程 ...和当前进程不一样的进程,在这个独立的进程中,不可以使用应用进程中的全局变量氏派,否则会森陆产生空指针异常。比如取Application就是空。当然,你可以使用跨进程通信的方法解决。

我这里是利用这个进程每隔一分钟启动了一个IntentService,以startForegroundService的方式,这也是谷歌的要求。然后在IntentService里可以访问应用app的资源。我这里是在IntentService里检查相关的条件是否满足,如果满足,就弹出一条通知提醒用户。看到这里你肯定要问,startForegroundService的此核顷方式必须调用startForeground显式弹出一个通知,如果不满足条件或者我就是不想弹任何通知,只是想偷偷的做一些后台任务呢?原则上谷歌是不允许这么做的,但是奈何任何系统都有bug,而我发现了一个可以避免弹通知的方法....

Android8 避免startForeground方法弹出通知

利用上面所述,你应该可以实现自己的后台任务了。

Ⅱ android中执行定时任务的几种方式

创建线程,倒计时和正计时都可以唤罩(在线程中睡眠就好了,到指定的时候再触发)

handler轻量级线程,循环操作,这个可和缺闹以参考网页链扮穗接

Ⅲ Android 后台定时任务有几种实现方式

123456789ignore_user_abort();//关掉浏览器,PHP脚枝镇本也可以继续执行.<a href="/s?wd=set_time_limit&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank" class="-highlight"纤手>set_time_limit</a>(0);// 通过<a href="/s?wd=set_time_limit&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank" class="-highlight">set_time_limit</a>(0)可以让程序无限制的执行下去$interval=60*30;// 每隔半小时运行do{ //ToDo sleep($interval);// 等待5分钟}while(true); 简单直接不毁搭嫌顾后果型

Ⅳ android怎么实现定时任务

import javax.swing.*;
import java.awt.*;
public class Problem extends JFrame{
//公用
ImageIcon proII;
JLabel proJL;
JPanel proJP;

JPanel proJP1_1;
JLabel proJL1_1;
JRadioButton projrb1_1,projrb1_2,projrb1_3;
ButtonGroup proBG1_1;
JButton proJB1_1;

Ⅳ android怎么实现定时的操作

有时候我们会遇到定时打开某些应用的这样一种需求。
比如最近我在使用读者 Android版的应用的时候,每次打开应用,应用发送一定的联网请求之后就可以给我的账号增加一定的积分,连续登录的次数越多,积分奖励越多。而一旦有一天没有登录,积分奖励又从最初的值开始。
为了避免某一天忘记打开应用或者应用打开后联网需要等待一段时间,可以通过定时达人这款手机应用定时地打开其它应用。
工具/原料
Android手机(我手机目前系统版本是4.2.2)
定时达人(TimeDo)
读者 Android应用
方法/步骤
在手机上安装定时达人软件
定时达人有自己的网站,相关应用在各大应用商城也有。可以通过apk进行安装,可以从应用商店下载安装。我是从散配google play上下载安装的。

添加新任务
设置任务困隐——设置时间

设置任务——给任务取个名字

设置任务——添加新任务
选择运行程序一栏

设置任务——选择定时打开的应用程序
点击应用程序,选择读者。

保存设置
这汪掘厅里需要点两次保存,之后就回到了定时达人主页面。

通过立即执行进行测试设置效果
单击定时打开读者一栏,在弹出下拉框中选择立即执行来立即执行任务。在设置正确的情况下读者应用被打开,通知栏会有相应通知提示。
在之前的设置步骤中,保持了默认的循环方式,即周循环,一周的每一天都选中。按照设置,每一天的指定时间都可以自动打开相应应用。

Ⅵ android 怎么实现后台注册一个service,定时定位的功能

public class ServiceLocationGPS extends Service implements AMapLocationListener {

private GlobalApp app;
private LocationManagerProxy aMapLocManager = null;
private AMapLocation aMapLocation;// 用于清烂判断定位败槐超时

public Timer timer;
TimerTask task;
public Integer period = 10;
public Integer count = 0;

@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}

@Override
public void onCreate() {
app = (GlobalApp) getApplication();
start();
super.onCreate();
}

@Override
public void onDestroy() {
stoptime();
super.onDestroy();
}

@Override
@Deprecated
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
super.onStart(intent, startId);
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
return super.onStartCommand(intent, flags, startId);
}

@Override
public void onLocationChanged(Location arg0) {
// TODO Auto-generated method stub

}

@Override
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub

}

@Override
public void onProviderEnabled(String arg0) {
// TODO Auto-generated method stub

}

@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
// TODO Auto-generated method stub

}

public void startLocation() {
if (aMapLocManager == null) {
aMapLocManager = LocationManagerProxy
.getInstance(ServiceLocationGPS.this);
System.out.println("startLocation");
aMapLocManager.requestLocationUpdates(
LocationProviderProxy.AMapNetwork, -1, 10, this);

} else {
aMapLocManager.requestLocationUpdates(
LocationProviderProxy.AMapNetwork, -1, 10, this);

}

public void start() {
initSchele();
// 10秒以后启动任务;
startSchele(10);
}

@Override
public void onLocationChanged(AMapLocation location) {

if (location != null) {
this.aMapLocation = location;// 判断超察正友时机制
Double geoLat = location.getLatitude();
Double geoLng = location.getLongitude();
String cityCode = "";
String desc = "";
Bundle locBundle = location.getExtras();
if (locBundle != null) {
cityCode = locBundle.getString("citycode");
desc = locBundle.getString("desc");
}
System.out.println("onLocationChanged," + geoLat + "," + geoLng);
// aMapLocManager.removeUpdates(this);
//stopLocation();
}

}

/**
* 销毁定位
*/
public void stopLocation() {
if (aMapLocManager != null) {
aMapLocManager.removeUpdates(this);
aMapLocManager.destory();
}
aMapLocManager = null;
}

/**
* 开启定时任务;
*/
public void startSchele(int delay) {
if (timer != null && task != null)
// 10秒以后执行任务;
timer.schele(task, delay * 1000, period * 1000);
}

public void initSchele() {
if (timer == null)
timer = new Timer();
if (task == null)
task = new TimerTask() {
@Override
public void run() {
startLocation();
}
};
}

private void stoptime() {
if (timer != null) {
timer.cancel();
timer = null;
}
if (task != null) {
task.cancel();
task = null;
}
}

}

Ⅶ android定时器的使用

  目前在项目中使用过的定时器主要是两种方式:1.handler的延时任务 2.timer的定时器

  下面主要来介绍这两种方式 定时器的用法,和遇到的坑 :
  1.handler的延时任务
  写了一个demo,是关于hanlder发送延时消息和 取消延时消息的

  但是在实际运用的过程中,常常会出现无法移除延时消息的问题,这个问题主要是因为两个runnable的对象不是同一个,
  当Activity进入后台运行后再转入前台运行,removeCallbacks无法将updateThread从message queue中移除。这是为什么呢?
  在Activity由前台转后台过程中,线程是一直在运行的,但是当Activity转入前台时会重新定义Runnable runnable;也就是说此时从message queue移除的runnable与原先加入message queue中的runnable并非是同一个对象。  解决方式1:如果把runnable定义为静态的则removeCallbacks不会失效,对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量迅洞的内存分配,我们做如下修改就能解决上面的这个问题.

  解决方式2:将所有的runnable任务放到一个集合中,根据runnable的id移除相应的任务,即可以解决这个问题

2.timer的延时任务
同样用上面的demo来说明使用方法:
要注意的是:
TimerTask运行在一个单独的线程里,而不是UI线程。所以使用 Android timer时,注意android的单线程原则,确保线程安全。不要纤物在TimerTask的run方法中做UI相关的操作,如:TextView.setText()等,这样可能会导致UI线程阻塞。如果需要可以使用handler向UI线程发消息,具体处理由UI线程自己完成。在使用完Timer之后,要使用Timer的cancel方法取消Timer,否则Timer一直在运行。

  这里需要注亩竖枯意的是,timer的cancel方法只能执行一次,不能在调用了cancel之后再进行timer的任务执行。

参考文章:
Android 定时器实现的几种方式和removeCallbacks失效问题详解

Android 中Timer和TimeTask完成定时任务

Ⅷ Android 后台任务执行

参考:
手机休眠引发的“血案”

使设备保持唤醒

目的为了后台能够执行定时任务,避免因为设备息屏等操作导致CPU进入睡眠状态,定时任务被暂停,这就需要能够唤醒CPU,使CPU能够起来工作

具有唤醒CPU功能, 唤醒CPU与唤醒屏幕非同一功能。

AlarmManager是安卓系统封装的用于管理RTC 模块,RTC(实时时钟)是一个独立的硬件时钟,可以在CPU休眠时正常运行,在预设的时间到达时,通过中断唤醒CPU。这意味着,岩槐亮如果我们用AlarmManager来定时执行任务,CPU可以正常的休眠,只有在需要运行任务时醒来一段很短的时间。

AlarmManager 定时任务测试粗宽:

MI8 UD:

测试1: 创建一个 Service, Service 中启动一个 AlarmManager 定时任务
息屏后会继续打印Log,但息屏超过1min 后,log 停止输出:

测试2: 创建一个前台通知Service
Service + StartForground + 前台通知 方式,
MI8 UD 息屏后仍继续打印log.

MI 8 + MI 10 经过测试,在长时间息屏状态下, AlarmManager 也会存在不工作情况。

另外,设备处于低电耗模式下, AlarmManager 会停止工作或延迟工作,解决办法: AlarmManager 利弊

手机长时间不操作,CPU 就会进入睡眠状态,会导致 Timer 中的定时任务无法正常运行。

息屏后,TimerTask 停止工作,再次亮屏后,继续工作

同样会由于息屏导致CPU睡眠, Handler 停止工作

太“重”了,使用起来。 影响设备耗电量。

WorkManager 也可以运行后台任务,用于在APP进程被kill后,系统依然可以运行的任务,不要用于APP被杀后,后台服务即停止的任务。

总结:

Timer并不太适用于那些需要长期在后台运行的定时任务。为了能让电池更加耐用,每种手机都会有自己的休眠策略,Android 手机就会在长时间不操作的情况下自动让 CPU 进入到睡眠状态,这就有可能导致 Timer 中的定时任务无法正常运行。

Alarm具有唤醒 CPU 的功能,即可以保证每次需要执行定时任务的时明碧候 CPU 都能正常工作。

AlarmManager 定时任务最小间隔5S, 如何设置间隔 < 5s, 也是按照 5s 间隔执行。

Android DozeMode

阅读全文

与android后台定时任务相关的资料

热点内容
宏杰加密时电脑关机 浏览:388
自己写单片机编译器 浏览:598
单片机按键闪烁 浏览:380
为什么icloud总是显连接服务器失败 浏览:888
如何设置域控服务器 浏览:738
想在上海租房子什么app好 浏览:184
编译程序各部分是必不可少的吗 浏览:885
编程不超过十行 浏览:763
数电编译器的作用 浏览:337
时间算法与现在有什么区别 浏览:162
7zip解压后没文件夹 浏览:902
为什么安卓送玫瑰ios收不到 浏览:8
美篇文章加密是什么意思 浏览:82
ilasm编译dll 浏览:38
呼吸灯单片机程序 浏览:954
linux域socket 浏览:250
qq分身怎么样才能加密 浏览:457
windows打开linux 浏览:999
新建文件夹为什么不能发送微信 浏览:604
交警app怎么绑定本人几辆车 浏览:989