【问题标题】:How to determine app is running from service如何确定应用程序正在从服务运行
【发布时间】:2012-12-13 11:07:56
【问题描述】:

这就是场景……

  1. 应用已打开
  2. 用户单击启动服务的按钮。
  3. 用户按 Home 键,然后长按 Home 键并从任务列表中清除应用程序。
  4. 服务继续运行,尽管应用程序已关闭。

如何从正在运行的服务中确定该应用程序是否已被杀死?这可能吗?

【问题讨论】:

  • 我认为!您可以在服务取消和服务启动时显示 Toast。
  • 我不确定你的意思...我不在乎服务是否正在运行,我只想知道用户是否已经杀死了启动服务的应用程序?
  • m 不是 suru,但您只想完成该服务,然后您可以在 alertbox 或 toast 中显示一条消息
  • 谢谢,但我不关心服务是否完成。我只关心应用程序是否在服务仍在运行时关闭。

标签: android android-intent service intentservice


【解决方案1】:

我想这就是你要找的东西:

 private boolean isAppRunning() {
    ActivityManager manager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
    for (RunningTaskInfo task : manager.getRunningTasks(Integer.MAX_VALUE)) {
        if ("com.example.YourLauncherActivityClassFullName".equals(task.baseActivity.getClassName())) {
            return true;
        }
    }
    return false;
}

您唯一需要提供的是应用的完整启动器活动类名称。

【讨论】:

    【解决方案2】:

    首先,您应该启动一项服务,该服务应在特定时间处理您的活动是否正在运行。为此,您可以在一段时间后使用警报管理器进行检查。

    要检查您的活动是否正在运行,您应该使用,

    ArrayList<String> runningactivities = new ArrayList<String>();
    
        ActivityManager activityManager = (ActivityManager)getBaseContext().getSystemService (Context.ACTIVITY_SERVICE); 
    
        List<RunningTaskInfo> services = activityManager.getRunningTasks(Integer.MAX_VALUE); 
    
            for (int i1 = 0; i1 < services.size(); i1++) { 
                runningactivities.add(0,services.get(i1).topActivity.toString());  
            } 
    
            if(runningactivities.contains("ComponentInfo{com.app/com.app.main.MyActivity}")==true){
                Toast.makeText(getBaseContext(),"Activity is in foreground, active",1000).show(); 
    
            }
    

    【讨论】:

      【解决方案3】:

      在你的主要(第一个)活动中:

      public static boolean isRunning;

      @Override

      public void onCreate(Bundle savedInstanceState) {
      
          isRunning = true;
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main);
          ...
      }
      @Override
      
      public void finish() {
          isRunning = false;
          super.finish();
      }
      

      检查服务中的 isRunning 标志。

      【讨论】:

        猜你喜欢
        • 2011-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多