【问题标题】:Android multi-activities app best way to detect application going in backgroundAndroid多活动应用程序检测应用程序在后台运行的最佳方法
【发布时间】:2013-01-09 09:11:43
【问题描述】:

我正在开发一个包含许多活动的 Android 应用程序。我的 MainActivity(开始活动)具有从服务器获取更新数据的代码。每次用户启动应用程序(第一次启动或在前台移动应用程序)时,我都想从服务器获取更新的数据。 第一次启动很好,我获取数据。但是,当用户进行其他活动并最小化我的应用程序并再次打开时,它会从最后一个状态开始。此时我如何检测应用程序正在重新启动,以便我可以再次获取数据。

我已经检查过 onResume()、onPause() 方法,但它们属于单独的活动。我想在应用程序级别捕获事件,就像我们通常在 iOS 应用程序中所做的那样。

【问题讨论】:

    标签: android android-activity activity-lifecycle


    【解决方案1】:

    AFAIK 你不能。您必须找到一种方法从所有活动中过滤 onResume()/onPause() 以找出应用程序进入后台。

    一个建议:

     public abstract class AbstractActivity extends Activity{
        private static long pauseTime=0;
        private static final long MIN_PAUSE_TIME = 3000;
    
        protected void onPause(){
          super.onPause();
          pauseTime = System.currentTimeMillis();
        }
    
        protected void onResume(){
          super.onResume();
          if(System.currentTimeMillis()-pauseTime > MIN_PAUSE_TIME){
             // do server stuff
          }
        }
     }
    

    然后让你的所有活动扩展这个。

    【讨论】:

    • 感谢您的编辑。我把这整件事都记在心里了,方法名上肯定有一些拼写错误。我通常只是一直使用自动完成。
    • 你应该使用 System.nanoTime() 来进行时间测量,因为 System.currentTimeMillis() 可以由于时间的校正而改变值。
    【解决方案2】:

    我会说最好的起点是阅读有关 Activity 生命周期的文档:http://developer.android.com/training/basics/activity-lifecycle/starting.html

    我的第一个想法不是在onCreate() 中运行代码(我假设您正在这样做),而是将代码放在onStart() 中,(但onResume() 也可能是合适的) - 有阅读文档,应该很明显哪个最适合您的应用程序

    【讨论】:

      【解决方案3】:

      创建一个扩展至应用程序的类,然后实现 onPause() 和 onResume()。 即如下..

       /**
      * Top-level Application class for the your app.
       */
      public class DummyApp extends Application {
          /* package */ static final String LOG_TAG = "DummyApp";
        onPause(){
        super.onPause();
        //do whatever you want--
        }
      
        onResume(){
        super.onResume();
         //Do whatever you want --
        }
        }
      

      然后在AndroidManifest.xml中提到这个应用名称“DummyApp”如下

      <application android:name="DummyApp"
                   android:label="@string/apLabel"
                   android:icon="@drawable/ic_launcher">
      

      我认为这可以解决...

      【讨论】:

        猜你喜欢
        • 2014-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多