标签: android-background

如何在android上创建一个永久的后台服务

我有一个噩梦试图在 android 上创建一个永久运行的简单后台服务。

此服务将执行一些后台任务,例如池用户社交媒体和显示通知,因此它只需要一次用户交互(登录)之后应该能够永远运行直到日子结束......

但它没有发生

这是我的清单:

<service
        android:name=".service.MyService"
        android:description="@string/serviceDescription"
        android:directBootAware="false"
        android:enabled="true"
        android:exported="false"
        android:icon="@drawable/ic_logo"
        android:label="@string/serviceLabel"/>
Run Code Online (Sandbox Code Playgroud)

我开始服务 Application onCreate()

    if (MyService.getInstance() == null) {
        Intent intent = new Intent(this, MyService.class);
        startService(intent);
    }
Run Code Online (Sandbox Code Playgroud)

服务:

public void onCreate() {
        super.onCreate();
        this.workDone = 0;

        this.workerMap = new HashMap<User.UserData, Worker>(3);
        this.listeners = new HashMap<Worker, Worker.WorkerListener>(3);
        this.usernames = new HashMap<APIFacade, List<String>>(3);

        this.threadPool = Executors.newFixedThreadPool(3);
        INSTANCE = this;

    }
Run Code Online (Sandbox Code Playgroud)

在我的代码中绝对没有我调用 STOPSERVICE 或 STOPSELF

那么为什么在某些随机情况下我会得到 nullpointerexception 呢?

有人甚至告诉我执行以下代码以强制 android“重新启动”服务

  @Override
    public int onStartCommand(Intent intent, int flags, int startId) { …
Run Code Online (Sandbox Code Playgroud)

android android-service android-background

6
推荐指数
1
解决办法
7853
查看次数

错误:文件名必须以.xml或.png结尾

即使我没有选择photothumb.db作为可绘制对象,但我还是收到一条错误消息,说photothumb.db应该以.xml或.png结尾

我的profilesmaller图片是类型png

以下是我的代码

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/profilesmaller"
    tools:context="charlenebuena.guest.HomeFragment">
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)

以下是我的Gradle控制台消息

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:mergeDebugResources'.
> C:\Users\Charlene Marie\AndroidStudioProjects\Guest\app\src\main\res\drawable\photothumb.db: Error: The file name must end with .xml or .png

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 2.72 secs
Run Code Online (Sandbox Code Playgroud)

android android-image android-drawable android-background

5
推荐指数
1
解决办法
2万
查看次数

React Native:即使退出应用程序,Google地图服务也会继续在Android设备上运行

当应用程序处于前台时,一切似乎都能正常工作.但是当我们强制关闭应用程序时,即使在MapView被销毁之后,地图服务似乎仍然有效.我们正在运行一个后台服务,让应用程序在后台运行.当应用程序关闭时,所有前台服务都会被杀死,但是当应用程序处于后台时,我们发现电池耗尽,当我们运行Android Profiler时,我们知道谷歌地图(csi.gstatic.com)的服务仍处于打开状态/甚至在后台运行.研究并了解谷歌地图使用该服务加载地图的静态内容(images..etc).通常,当MapView被销毁时,服务不应该运行.

当App在前台时当应用程序处于背景/被杀死状态时

第一个图像是应用程序是前台并且服务正常运行.第二个图像是当应用程序被后台/终止时,即使MapView已被破坏,服务仍在运行.(事件是结构服务).有没有办法杀死与MapView相关的所有服务?

android google-maps android-mapview android-background react-native-android

5
推荐指数
0
解决办法
261
查看次数

禁用电池优化

华为和Honor设备有一种称为“耗电应用”的模式,可以在应用异常消耗时通知用户。

Settings > Battery > "gear icon" > "Close excessively power-intensive apps" > On/Off
Run Code Online (Sandbox Code Playgroud)

有没有办法在华为和荣耀设备中以编程方式禁用它?如果没有,是否有人知道调用电池菜单的意图,以便我可以手动禁用它?

我已经试过了

Intent.ACTION_POWER_USAGE_SUMMARY
Settings.ACTION_BATTERY_SAVER_SETTINGS
Run Code Online (Sandbox Code Playgroud)

但它不起作用

android android-intent android-background huawei-mobile-services

5
推荐指数
0
解决办法
5275
查看次数

Android 定期工作请求在应用程序启动和关闭时启动和停止

当我的应用程序启动时,我使用WorkManager创建了一个定期工作请求,以从服务器获取数据并且其工作正常。我的问题是,我想在我的应用程序关闭时取消工作请求。

当我的应用程序关闭时如何取消工作请求或如何检测应用程序正在关闭?

我将不胜感激任何建议。

android background-service android-asynctask android-background android-workmanager

5
推荐指数
1
解决办法
4002
查看次数

继续运行后台服务 (Android)

我创建的后台服务在用户登录后启动,即使在活动被“扔到垃圾桶”之后也应该工作。服务显示它正在运行的通知,注册两个广播接收器以监视 wifi 和电话状态,并且应该继续运行直到令牌未过期或用户注销。

一切正常,但服务被 android 杀死。真正有效的唯一解决方案是这篇文章的说明 http://nine-faq.9folders.com/articles/37422-stop-your-huawei-smartphone-from-closure-apps-当你锁定屏幕 不幸的是,这个解决方案是不可接受的,因为它依赖于用户。

由 C# 使用 Xamarin 创建的代码,但如果有人知道如何以编程方式实现文章中的解决方案,即使使用其他语言(java,kotlin),我也会很高兴提供有用的建议

显现

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
          android:versionCode="1" 
          android:versionName="1.0" 
          package="com.companyname.com.bgapptest">
  <uses-sdk android:minSdkVersion="25" android:targetSdkVersion="28" />
  <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme">
    <service
       android:name="com.BGAppTest.BackgroundService"
       android:enabled="true"
       android:exported="false"/>
  </application>
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <uses-permission android:name="android.permission.CALL_PHONE" />
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
  <uses-permission android:name="android.permission.WAKE_LOCK" />
  <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
</manifest>
Run Code Online (Sandbox Code Playgroud)

从活动开始服务

活动

    using System;
using System.Linq;
using Android.App;
using …
Run Code Online (Sandbox Code Playgroud)

android android-service xamarin.android android-permissions android-background

5
推荐指数
1
解决办法
399
查看次数

在Android上定期安排后台任务

我正在开发一个应用程序,我必须从多个传感器读取数据并每 15 分钟将其发送到远程服务器。这也必须在应用程序关闭/终止时完成,并且我还必须确保它始终执行。我还想确保它(几乎)恰好每 15 分钟发生一次(+-1 分钟差异是上限)。

此时,我找到了 3 个选项:使用 Workmanager、Alarmmanager 或使用前台服务。按照文档,Workmanager 似乎是执行后台任务的方法,但是,在阅读了一些内容之后,Alarmmanager 似乎是一个更安全的选择(Workmanager 有时在打瞌睡模式方面存在问题,并且时间不准确,因为它使用了 Flex持续时间至少 5 分钟)。前台服务实际上不允许执行此类任务(它并不是真正长时间运行,它只是一个周期性任务),并且在较新的 Android 版本中受到限制。您认为使用 Alarmmanger 来完成此任务是个好主意,还是应该使用其他东西?谢谢!

android android-alarms android-background android-workmanager

5
推荐指数
1
解决办法
4363
查看次数

Android PendingIntent FLAG_NO_CREATE不返回null

我在PendingIntents上遇到了一些麻烦.每次我的应用程序打开时,它都会安排一些广播.我的问题是,现有的PendingIntents无法识别.

我知道必须使用相同的参数创建PendingIntents和unterlaying Intents.

她是我的代码......在我的Launcher活动中作为Asynctask开始.

        long nextExecute = getNextExecute(t);

        if (nextExecute > System.currentTimeMillis()) {

            int tt = 12;

            intent = new Intent(context, BirthExecutor.class);
            intent.putExtra(Target.ROW_ID, tt);

            PendingIntent pending = PendingIntent.getBroadcast(context, 10, intent, PendingIntent.FLAG_NO_CREATE);

            if (pending != null) {

                manager.set(AlarmManager.RTC_WAKEUP, nextExecute, pending);

                BirthLog log = new BirthLog("Scheduled " + t.getFirstname() + " " + t.getLastname() + " on " + df.format(nextExecute));
                log_helper.insertLog(log);

            } else {

                BirthLog log = new BirthLog(t.getFirstname() + " " + t.getLastname() + " already active!");
                log_helper.insertLog(log);

            }

            intent = …
Run Code Online (Sandbox Code Playgroud)

android alarmmanager android-service android-pendingintent android-background

4
推荐指数
1
解决办法
3841
查看次数

用于精确时间执行的WorkManager API

我想在确切的时间定期向用户发送离线通知(假设每天上午9:00).现在我正在尝试工作管理器Api,但无法找到任何方法,如AlarmsManager的setExact或setexactandallowwhileidle.

在我的情况下,只有repeatInterval选项是24(每天),但如何在确切的时间(早上9点)发送通知.

android android-background android-workmanager

4
推荐指数
1
解决办法
912
查看次数

Android服务是一个单身人士吗?

如果我在主活动中启动服务,然后退出main并再次创建main,是否会将新服务实例放在其位置?或者它是同一个实例?还是会有两个例子?我需要知道,因为在我的服务中,每次创建新服务时我都会创建一个唯一的ID.

android android-service android-lifecycle android-background

4
推荐指数
1
解决办法
541
查看次数