小编Ahm*_*rad的帖子

检查应用程序是在前台还是后台运行(使用同步适配器)

我知道这是一个重复的问题,但我看到了整个地方,找不到适合我的解决方案......

我有一个从TMDB API获取电影数据的应用程序,它使用同步适配器逐页获取,基本上它运行很好,除非在应用程序打开且用户不在第一页时运行同步适配器的定期同步,所以我的选择是强制更新电影列表并将用户发送到列表的顶部,这是非常糟糕的体验,因此不被视为一个选项,或者我可以检查应用程序是否正在运行,无论是在前台还是在应用程序中堆栈,它对用户不可见但仍在运行,所以通过搜索得到的最好的是这段代码:

   public static boolean isAppRunning(final Context context, final String packageName) {

    final ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    final List<ActivityManager.RunningAppProcessInfo> procInfos = activityManager.getRunningAppProcesses();

    if (procInfos != null) {
        for (final ActivityManager.RunningAppProcessInfo processInfo : procInfos) {
            if (processInfo.processName.equals(packageName))
                return true;
        }
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)

但无论出于什么原因,它都无法正常工作并且即使我通过刷卡杀死它也看到应用程序正在运行,起初我认为这是因为我有一个同步适配器可以被认为是运行的应用程序所以我使用了另一个进程它在清单中使用了

android:process=":service"
Run Code Online (Sandbox Code Playgroud)

但它不起作用

还考虑在活动的onStart和onStop中使用变量,但不保证在关闭或杀死应用程序时会调用onStop,因此试图避免使用此方法

这是我的manifest.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="inc.mourad.ahmed.watchme">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />

<permission
    android:name="inc.ahmed.mourad.ACCESS_WATCHME_DATABASE"
    android:label="access my movies content provider"
    android:protectionLevel="dangerous" />
<permission
    android:name="inc.ahmed.mourad.ACCESS_WATCHME_SYNC_SERVICE"
    android:label="access …
Run Code Online (Sandbox Code Playgroud)

android android-syncadapter

3
推荐指数
2
解决办法
4155
查看次数

标签 统计

android ×1

android-syncadapter ×1