Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android活动生命周期问题_Android_Android Activity - Fatal编程技术网

Android活动生命周期问题

Android活动生命周期问题,android,android-activity,Android,Android Activity,我到底想要什么? 在我的应用程序中,我有4/5个活动和一个与服务器对话的后台线程。我想有一些方法来获得我的应用程序中最活跃的活动。但令人惊讶的是,他们不可能让我得到这些 我做了什么? 搜索了一段时间后,我实现了一个变量mcurrentonotopactivity,该变量属于Activity类型,并且在我设置该变量的每个Activity上执行onResume()和onPause()。(这实际上是一种糟糕的方式) 我到达了哪里? 现在,在从服务器接收到一些消息后,我想在UI线程上做一些事情,即显示一

我到底想要什么?

在我的应用程序中,我有4/5个活动和一个与服务器对话的后台线程。我想有一些方法来获得我的应用程序中最活跃的活动。但令人惊讶的是,他们不可能让我得到这些

我做了什么?

搜索了一段时间后,我实现了一个变量
mcurrentonotopactivity
,该变量属于
Activity
类型,并且在我设置该变量的每个Activity上执行
onResume()
onPause()
。(这实际上是一种糟糕的方式)

我到达了哪里?

现在,在从服务器接收到一些消息后,我想在UI线程上做一些事情,即显示一些对话框或刷新
列表视图
,现在他们无法检查
mcurrentonotopactivity
是否引用了实际正在运行的活动(无论出于何种原因,已完成或未聚焦)

我现在想要什么? 现在我基本上需要以下两个问题的帮助:-

  • 我如何知道我的应用程序当前运行最频繁的活动是什么
  • 如何知道“活动”是否仍在运行(即,我需要类似于
    IsActicAtLive()(虚构函数)
    的东西,它在调用
    onResume()
    onPause()之间返回true

  • 我在活动中使用一个变量实现了2点,并在
    onResume()和
    onPause()中设置它
    。但是,这是唯一的方法吗?

    您可以使用,这样只有您最上面的活动才能绑定到服务。

    我目前正在使用您答案中的第二种方法。让我检查一下您第一种方法的效率角度。时不时地查询ActivityManager听起来效率不高,至少对我来说是这样的……任何方法都没有谢谢你的回答。经过一些修改后,我结束了你建议的选项的实施。谢谢!!@Amit:-:)哪一个。?第一种或第二种方法。第二种方法。。因为我发现这真的是可扩展的。。我用这些方法创建了一个活动,我的所有其他活动都扩展了这个活动。到目前为止,我还没有在我的应用程序中使用服务。我需要为此使用它吗?对不起,我以为与服务器对话的后台线程是作为服务实现的,但如果不是,我不建议仅为此实现服务。
    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(); 
    }
    
    class MyActivity extends Activity {
         static boolean active = false;
    
          @Override
          public void onStart() {
             super.onStart();
             active = true;
          } 
    
          @Override
          public void onStop() {
             super.onStop();
             active = false;
          }
    }