请问android 的service 在手机休眠时不能正常运行,手机唤醒或者连接电源线时恢复正常,怎么解决呀

frankenstein306005 2017-09-27 09:08:51
我想实现后台服务1分钟上报一次定位,能够在手机锁屏休眠时能够正常运行,试了前台服务,电源锁,等各种方法都不行。咕咚,高德等app 的持续录制轨迹不知道是怎么实现的。
...全文
196 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
新画师 2017-09-28
  • 打赏
  • 举报
回复
http://blog.csdn.net/qq_35693043/article/details/78114987 这是我的做法,目前我项目中是这样的。
  • 打赏
  • 举报
回复
楼上的做法可以的,不能正常运行是不是绑定了activity导致service随着activity的生命周期走了?
Jing丶無雙 2017-09-28
  • 打赏
  • 举报
回复
你用startService方式启动Service,手机在休眠时该Service也不会停止运行的
Intent startIntent = new Intent(this, MyService.class);
startService(startIntent);
MyService
public class MyService extends Service implements Runnable {

	public static final String TAG = "MyService";
	private boolean isStop;

	@Override
	public void onCreate() {
		super.onCreate();
		Log.d(TAG, "onCreate() executed");
		isStop = false;
		new Thread(this).start();
	}

	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		Log.d(TAG, "onStartCommand() executed");
		return super.onStartCommand(intent, flags, startId);
	}

	@Override
	public void onDestroy() {
		super.onDestroy();
		Log.d(TAG, "onDestroy() executed");
		isStop = true;
	}

	@Override
	public IBinder onBind(Intent intent) {
		return null;
	}

	@Override
	public void run() {
		int count = 0;
		while (!isStop) {
			try {
				Thread.sleep(60*1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			Log.d(TAG, "执行次数" + (++count));
			//这里写下你1分钟上报一次定位的逻辑
		}
	}
}
db服务器连接mysql+redis高可用高性能框架干货1、使用c++语言,vs2019开发垮平台[windows和linux]连接MySql和redis框架。2、使用MySql持久化玩家数据,redis做玩家数据缓存层,redis不做数据持久化。mysql搭配redis工作效率非常高效,就好比男女搭配干活不累,没有redis,mysql也能独立很好的完成用户读写请求。有了redis,用户访问数据的效率更高,间更短,快速的完成请求。3、讲解如何保持mysql和redis数据强一致性策略,并在代码里实现。每次启动redis,使用管道技术,从mysql批量导入活跃用户数据到redis中,并设置过期间.4、教程使用线程池技术,每个线程拥有自己独立的数据,线程绑定类。每一个实例就包含一个线程每个线程数据里包含:mysql连接器、redis连接器、内存回收池、安全的串行队列、条件变量、互斥量保证线程内的数据安全。5、工作原理:没有请求,各个工作线程处于休眠状态。有读写请求,从线程池获取一个线程,添加读写请求,把数据推送到线程工作队列中。然后工作线程获取队列的数据,进行串行工作任务安排,进行mysql数据库读写操作,以及redis读写数据操作,当完成工作任务,执行下一个工作任务,同把处理结果推送到逻辑线程,把数据给用户。6、用户读数据策略:用户获取数据首先是先从redis查找数据,redis命中,返回数据给玩家,redis命中失败,mysql中查找数据,然后写入数据到redis中,返回数据给用户。7、用户写数据策略:用户先从redis中删除数据,然后写数据到mysql中,最后再把数据写入到redis中,保持数据一致性。8、教程是一个干货教程,不是新手教程,mysql基础语法讲解的少,redis有讲解基础系列。教程讲解的是如何搭建一个支持高并发,高性能的读写数据库框架,使用mysql+redis搭配的高可用、高性能框架。该套框架在多个项目使用过,也在棋牌类项目里面使用过。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧