【问题标题】:Android: stopping a thread when no activity runningAndroid:没有活动运行时停止线程
【发布时间】:2012-03-30 14:51:56
【问题描述】:

我有这个帖子:

        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;
    }

我希望我的线程在没有活动运行时停止(这对我来说意味着应用程序已关闭)并且由于某种原因,即使我的活动没有显示,我也总是从函数中获得“真”.. 出了什么问题?

【问题讨论】:

    标签: android multithreading android-activity


    【解决方案1】:

    您可以将正在运行的活动更改为:

    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 中进行检查,因为在此之前,活动仍然会像在前台一样报告。

    【讨论】:

    • 你写for循环的方式和其他语言的foreach循环一样吗?
    • 是的,这就是 Java 中 foreach 的语法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多