让应用程序在android中后台运行

hy *_* fa 9 android android-alertdialog

对话框通知用户禁用一个应用程序的电池优化

嗨:我很好奇如何显示此对话框。当我按允许时,此应用程序的电池优化功能被禁用。这是一个新的Android API

hy *_* fa 8

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            String packageName = context.getPackageName();
            PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
            if (!pm.isIgnoringBatteryOptimizations(packageName)) {
                Intent intent = new Intent();
                intent.setAction(android.provider.Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
                intent.setFlags(FLAG_ACTIVITY_NEW_TASK);
                intent.setData(Uri.parse("package:" + packageName));
                context.startActivity(intent);
            }
        }
Run Code Online (Sandbox Code Playgroud)

另外,您需要在清单中添加以下权限

<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
Run Code Online (Sandbox Code Playgroud)


riy*_*ali 6

这是API 23 (Marshmallow) 与Doze Battery Optimization一起引入的新应用程序待机功能的一部分,旨在优化应用程序处于后台(应用程序待机)或设备长时间处于睡眠状态(Doze)时的电源和资源使用情况。

以下是Android 开发者网站页面的解释:

具体来说,在App Standby模式下,当用户没有主动使用某个应用程序时,系统会判定该应用程序处于空闲状态。当用户在一段时间内没有触摸应用程序并且以下条件都不适用时,系统会做出此决定:

  • 用户明确启动该应用程序。
  • 该应用程序当前有一个位于前台的进程(作为活动或前台服务,或者由其他活动或前台服务使用)。
  • 该应用程序会生成一条通知,用户可以在锁定屏幕或通知托盘中看到该通知。
  • 该应用程序是活动的设备管理应用程序(例如,设备策略控制器)。虽然设备管理应用程序通常在后台运行,但它们永远不会进入应用程序待机状态,因为它们必须保持可随时从服务器接收策略的状态。

当用户将设备插入电源时,系统将应用程序从待机状态释放,允许它们自由访问网络并执行任何挂起的作业和同步。如果设备长时间闲置,系统会允许闲置应用程序每天访问一次网络。

因此,这意味着从 API 23 (Marshmallow) 开始,设备可能会主动让您的应用程序处于待机状态,阻止网络访问(例如同步等任务)并限制(或禁用)后台执行。现在,对于大多数应用程序来说,这种行为很好,或者您可以轻松地针对此类行为进行优化,但对于某些应用程序来说,这可能会导致一些意外行为,特别是对于优化不佳或使用非标准同步策略或某些应用程序来说。后台同步/执行的其他方式。因此,为了避免这种情况,用户可以明确地将应用程序标记为未优化,系统将回退并且不会将应用程序置于待机状态,尽管这会导致较差的用户体验,并且您不应该对常规应用程序执行此操作,因为这些应用程序可能会优化。