Articles of android wake lock

即使我正在发布它,WakeLock仍然保持错误

我有一个应该在后台运行的服务。 它在我的应用程序打开时启动,并在用户关闭我的应用程序时结束。 每当我的应用程序在后台或屏幕关闭时,我仍然需要运行该服务。 我用WakeLock实现了这一点,但由于某种原因我在标题中得到了错误。 这是令人担忧的,因为我可能是内存泄漏WakeLock(如果我理解正确)。 我可以通过重新启动我的应用程序来触发错误。 这是相关的代码: public class SomeService extends Service { @Override public int onStartCommand(Intent intent, int flags, int startId) { super.onStartCommand(intent, flags, startId); PowerManager manager = (PowerManager) getSystemService(POWER_SERVICE); mWakeLock = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, “TAG”); if (!mWakeLock.isHeld()) mWakeLock.acquire(); //Handle other processing return START_STICKY; } @Override public void onDestroy() { if (mWakeLock.isHeld()) mWakeLock.release(); super.onDestroy(); } } […]

Android Espresso,测试前唤醒设备。 如何使用自定义清单进行测试?

我一直在用androids新的espresso框架编写测试,并发现它运行良好。 一个恼人的事情(特别是浓缩咖啡)是我必须确保我的屏幕醒来并解锁以便运行测试。 我发现了一种解决方法(通过各种来源),但我不确定整合它的最佳方法。 所以这就是我所做的,在我的“Home”活动中,我有以下代码: Home.class: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /************ Put this in a conditional for a test version ***********/ KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); KeyguardManager.KeyguardLock keyguardLock = km.newKeyguardLock(“TAG”); keyguardLock.disableKeyguard(); getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); } 您还需要添加以下权限: 所以在这样做之后,我的测试现在唤醒我的手机运行所以我没有必须站岗并确保屏幕在测试开始之前没有关闭。 我宁愿不在我的应用程序中包含这些权限。 我知道使用gradle可以制作具有自己的android清单的不同“风味”,它将合并到主清单中。 我正在考虑使用它,但我不想仅仅为了这个原因添加一种味道,因为这已经使用了测试构建types来运行。 从android gradle文档看起来,您无法为instrumentTest目录创建AndroidManifest,因为它将自动生成。 但是,我想知道是否有其他方法可以在不创建variables的情况下执行此操作,然后指定测试应该运行该变体。 此外,我不确定所有这些的确切语法,并认为只是在网站上为其他人提供此信息会很好,因为它似乎分散了。 最后,如果有人知道更好的方法来解决唤醒手机测试的问题,我很乐意听到它,因为我不是这种方式的忠实粉丝,我正在尝试。

从接收器/服务打开屏幕

我希望我的应用能够打开屏幕并显示我的应用。 假设我正在设置闹钟,每小时我都希望我的应用在设备自然睡眠前显示2分钟。 我看到WakeLock(FULL_LOCK)和KeyguardManager已被弃用。 我创建了一个WakefulBroadcastReceiver和服务,这些都在工作。 @Override protected void onHandleIntent(Intent intent) { // I need to show the screen here! for (int i=0; i<5; i++) { Log.i("SimpleWakefulReceiver", "Running service " + (i + 1) + "/5 @ " + SystemClock.elapsedRealtime()); try { Thread.sleep(5000); } catch (InterruptedException e) { } } Log.i("SimpleWakefulReceiver", "Completed service @ " + SystemClock.elapsedRealtime()); […]

Android蓝牙和WakeLock关系

我正在开发一个在后台运行的Android应用程序,并支持蓝牙配件。 我想在后台不断收听蓝牙设备尝试打开手机sockets。 我的问题是,是否有可能在不经常保留部分唤醒锁的情况下实现这一点,因为这显然会产生严重的电池后果。 所以我想知道的是蓝牙对手机入睡的影响。 打开蓝牙sockets时手机是否保持清醒状态? 如果设备尝试连接,蓝牙芯片是否会自动唤醒Android? 我试图做一些测试来回答这些问题,但很难分清唤醒锁的发生情况; 此外,我不知道我是否可以依赖于我观察到的行为或者是否可以在其他设备上进行更改。

三星“应用程序优化”function在3天后杀死后台应用程序

我们目前正在开发一款适用于健身追踪应用的Android应用。 它在后台不断运行,并且在大多数设备上运行良好,但是我们一直遇到应用程序在某些三星设备上完全死机的问题。 经过一番调查,似乎有些三星设备有一个完全自定义的“应用优化”function( http://forums.androidcentral.com/samsung-galaxy-s6/599408-app-optimisation-after-updating.html ),基本上是Dozefunction的(非常)原始版本,存在于Android的更高版本中,如果它们三天没有被使用,它们基本上只是谋杀应用程序。 由于此应用程序或多或少仅执行日志记录,并且未打开活动,因此对我们来说存在很大问题,因为此function已在许多三星设备上预先启用。 这个问题通过使用前台服务来解决,但这是一个解决方案的大锤,需要通过持续通知来扰乱用户,而我们真的不需要应用程序处于前台 – 我们对正常的电源很好管理Android。 三星应用程序优化function明确指出,如果应用程序未使用三天,它将“优化”应用程序。 有没有人了解三星认为“被使用”的东西,我能以某种方式触发吗? 侧面咆哮:在我看来,这是一个糟糕的实现function,使Android上的开发更具敌意。 除了我们的用例,它将会破坏任何信使应用程序。 如果不是因为Facebook Messenger和Whatsapp很难被豁免应用,那么用户就会疯狂,因为这会破坏他们的体验。

在Android 5.1中每秒调度一次闹钟

我想在我的应用程序中每秒运行一次报警服务。它在5.1版本以下工作正常。 但在5.1设备中不会触发。 我正在使用commonsware清醒的意图服务。logcat消息是说“ 可疑短间隔1000毫秒;扩展到60秒 ”。 我怎样才能轮询5.1的每一秒? 有人可以build议我怎么做到这一点? 更多的解释: 我的用例是我需要每隔30分钟进行一次操作。 AFAIK对于这个使用报警pipe理器是有效的方式,但在这里 1)我需要向用户显示倒数计时器。 (定时器任务,倒数计时器,ScheduledExecutorService对此非常有用) 2)即使应用程序在后台,我也需要每隔30分钟(通过通知)通知用户(警报服务就足够了) 但在这里,我的问题是当应用程序在后台,当你从最近刷出应用程序(即应用程序进程被终止)没有任何服务或定时器,处理程序,执行器服务将无法正常工作。 在这种情况下,如何在完成30分钟后通知用户。 如果我以错误的方式思考,请引导我。 谢谢, 切塔尼亚

WiFi锁不起作用,如何防止wifi功率节省?

我做了一个应用程序,将手机变成networking摄像头,并使用手机连接将图像发送到互联网networking空间。 我正在使用广告活动,每5或15分钟设置一个“闹钟pipe理器”执行一项服务。 要执行服务的整个执行,我会执行一次唤醒locking,但是当服务完成时会中断。 所有这一切都与移动连接完美的工作,但不与wifi一样。 我已经在无线networking睡眠设置在WiFi选项策略“从不”。 但经过一段时间(并不总是相同的)手机似乎进入省电模式:WiFi图标尚未在状态栏,但手机无法连接。 即使是我使用浏览器…所以我必须断开连接并手动重新连接。 logcat中的消息: notify conn break (IOEx), close connection即使手机插上电源!!! 为什么? (1) 做一个由启动服务的活动组成的另一个应用程序,它总是以一个唤醒锁来运行。 所以我已经添加了wifilocking以确保连接,而且这种方法有时运行,而其他一些不是。 总是一样的notify conn break (IOEx), close connection为什么? (2) 最后一个实验是从第一个应用程序(报警pipe理器)派生出来的,并确保wifi没有进入睡眠/省电模式(一个??)我已经在执行代码后以飞行模式打开电话并在循环开始时closures(连接)。 这项工作可以两天,但有时只是在工作后(每个小时或两个,而不是每个5分钟,或有时不工作一整天,然后重新启动没有任何理由..)。 那么,为什么飞机模式有时不会重新build立起无线连接呢? (还有一些时候呢?)(3) 这款手机是原装2.2版的三星Galaxy ACE,并一直插上充电。

AlarmManager启动服务时的唤醒locking

Android的AlarmManager Javadoc状态 When an alarm goes off, the Intent that had been registered for it is broadcast by the system, 在Android提供的API演示中有一个AlarmService (package com.example.android.apis.app),它演示了AlarmService的使用。 其中我们有以下内容(为清晰起见编辑): PendingIntent mAlarmSender = PendingIntent.getService(AlarmService.this, 0, new Intent(AlarmService.this, AlarmService_Service.class), 0); AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 30*1000, mAlarmSender); 所以在这个例子中,它不会执行PendingIntent mAlarmSender = PendingIntent.getBroadcast(…); 相反,它做了一个Javadoc永远不会提及的getService 。 我询问这个​​问题的原因是由于CPU唤醒锁的影响。 Javadoc说,一旦广播接收器的onReceive()返回,AlarmManger的唤醒锁就会被释放。 我想知道的是,如果你使用像例子中的闹钟,唤醒锁的含义是什么? Javadoc似乎没有解决这个问题。 如果有任何事情,似乎意味着您在设置闹钟时必须使用广播技术。

Android:前台服务与wakeLock

我对Android相对来说比较陌生,所以我所要求的可能看起来很明显(虽然我已经阅读了所有类似题目的问题,并已经进行了大量的search)。 我需要长时间连续监测加速度计。 已经提出了两种方法: 1)获取在加速度传感器被监视的整个时间保持的部分唤醒锁; 和 2)监视前台服务中的加速度计。 第一种方法似乎使用了大量的电池寿命。 第二种方法应该导致只有很less人遇害的服务,但是我不确定“很less”意味着什么。 应该采用哪种方法,我应该考虑哪些方法?

如何在没有SyncAdapter的情况下在Android上实现帐户?

我正在为使用内置帐户系统(使用AccountManager API)的Android应用程序实现login系统。 在Android 2.2+上一切都很好,但在Android 2.1上,不包括SyncAdapter会导致在帐户设置屏幕上重新启动(请参阅http://code.google.com/p/android/issues/detail?id=5009和AccountManager没有SyncAdapter? ) 为了解决这个问题,我实现了一个存根SyncAdapter,它只是从IBinder onBind(Intent intent)返回null ,并将相关的东西添加到清单。 这解决了Android 2.1的重启问题。 然而,它引入了一个进一步的问题:添加帐户后,Android系统稍后会启动帐户同步。 尽pipe没有发生错误(事实上,我的SyncAdapter什么都不做,除非通过返回null ,否则无法导致错误),同步图标保持停留在顶部的通知栏中。 这会导致Android同步系统保持永久性唤醒locking ,防止设备进入hibernate状态。 帐户不会在帐户设置屏幕(在“数据和同步”标题下)中列出任何可同步的组件,并且始终在帐户列表中显示同步状态的“同步处于closures状态”(即使同步图标在通知栏)。 禁用帐户同步不会消除该问题。 删除帐户可以停止问题。 我的猜测是我不应该返回null。 我应该返回一个ThreadedSyncAdapter的基本实现吗? 获得一个帐户系统没有相关的同步在2.1和2.2 +正常工作的任何帮助非常感谢。