Android: остановка потока при отсутствии активности - PullRequest
0 голосов
/ 30 марта 2012

У меня есть эта тема:

        public void run() {
        try {
            while(isThereActivityRunning()) {
                results = sendGetMessage();
                b.putString("results", results);
                receiver.send(2, b);
                ConnectionThread.sleep(timeInterval);
            }
        } catch (InterruptedException e) {
            results = e.toString();
        }
     Log.d("Service", "Serivce Stoped");
    }

и функция, которая проверяет, выполняется ли у меня какое-либо действие:

    private boolean isThereActivityRunning()
    {
        String activity;
        ActivityManager activityManager = (ActivityManager)context.getSystemService (Context.ACTIVITY_SERVICE); 

        List<RunningTaskInfo> services = activityManager.getRunningTasks(Integer.MAX_VALUE); 

        for (int i1 = 0; i1 < services.size(); i1++) { 
            activity = services.get(i1).topActivity.toString();
            Log.d("Activity", activity);
            if (activity.contains(context.getString(R.string.app_name))
                return true;    
        } 
        return false;
    }

Я хочу, чтобы мой поток останавливался, когда не выполнялось никаких действий (для меня это означает, что приложение закрыто), и по какой-то причине я всегда получаю "true" из функции, даже когда моя активность не отображается .. что не так

1 Ответ

0 голосов
/ 30 марта 2012

Вы можете изменить свою текущую активность следующим образом:

private boolean isThereActivityRunning(){

    ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
    if (appProcesses == null) 
      return false;

    final String packageName = context.getPackageName();
    for (RunningAppProcessInfo appProcess : appProcesses) {
      if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND && appProcess.processName.equals(packageName)) {
        return true;
      }
    }

    return false;
}

Это должно вернуть false, если ваше приложение не на переднем плане.В Android вы не получите уведомление о том, когда приложение действительно будет убито.Еще одно замечание: это следует проверить как можно раньше в onStop действия, потому что до этого действие все равно будет отображаться как на переднем плане.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...