zoukankan      html  css  js  c++  java
  • Android长时间后台运行Service

         项目需要在后台获取GPS经纬度。当用户对手机有一段时间没有操作后,屏幕(Screen)将从高亮(Bright)变为暗淡(Dim),如果再过段时间没操作,
    屏幕(Screen)将又由暗淡(Dim)变为不显示(Off),如果再过段时间没操作,CPU将sleep,从on变为off.这时服务会被杀死。
    输出log:
    网络给出很多种解决方法有横竖屏还有输入输出没close,创建太多对象等,但是发现不做任何实质操作只开启一个服务,锁屏后一段时间也会出现上面log。
    之后尝试过:
        1.休眠后,手机闹钟服务定时触发后台服务无效。
        2.长时间休眠后,注册动态广播监听app被移除无效。
        3.长时间休眠后,后台服务被销毁时触发重启服务无效,根本没有进入ondestory()方法。
        4.WAKE_LOCK无效。
    还有就是一个解决办法是开启前台服务但是会一直有通知。最后综合思路是:
    1监听用户锁屏。
    2.锁屏时打开前台广播,解锁时打开后台广播。
    监听用户锁屏时必须是动态注册在manifest中无效。
    IntentFilter screenStateFilter = new IntentFilter();
    		screenStateFilter.addAction(Intent.ACTION_SCREEN_ON);
    		screenStateFilter.addAction(Intent.ACTION_SCREEN_OFF);
    		registerReceiver(MyBroadCastReciever, screenStateFilter)
    
    BroadcastReceiver MyBroadCastReciever = new BroadcastReceiver() {
    
    		@Override
    		public void onReceive(Context context, Intent intent) {
    			if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
    				Log.i("application", "Screen went OFF");
    				Toast.makeText(context, "screen OFF", Toast.LENGTH_LONG).show();
    			} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
    				Log.i("application", "Screen went ON");
    				
    				Toast.makeText(context, "screen ON", Toast.LENGTH_LONG).show();
    			}
    		}
    	};
    然后就是前台服务就是在service的onStartCommand中加入
    NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    		NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
    		mBuilder.setPriority(Notification.PRIORITY_MIN);// 设置该通知优先级
    	//	mBuilder.setSmallIcon(R.drawable.gpsblue);
    		Notification notification = mBuilder.build();
    		startForeground(1, notification);
    

    startForeground(1, notification);方法中参数是0,前台服务是无效的;传1是有效的。所以监听锁屏时,锁屏开启服务传1。这样service是前台的一直运行,但是看不到通知。屏幕亮时服务传0,service不容易被杀死。

  • 相关阅读:
    Java菜鸟学习笔记(3)--Java API 文档下载与文档注释的使用
    常用控制台命令大全-Ubuntu篇
    Java菜鸟学习笔记(2)--Ubuntu JDK环境变量配置与常见问题
    Java菜鸟学习笔记(1)--Windows JDK环境变量配置与常见问题
    Java菜鸟学习笔记(x)-《java学习圣经宝典》笔记
    自我管理&时间管理(转)
    方滨兴校长在2013届本科生毕业典礼上的讲话(转)
    static Map的使用
    好的测试网站
    经典css网站
  • 原文地址:https://www.cnblogs.com/andies/p/5893143.html
Copyright © 2011-2022 走看看