【问题标题】:iOS AppDelegate equivalent in AndroidAndroid 中的 iOS AppDelegate 等效项
【发布时间】:2012-08-03 13:35:22
【问题描述】:

我有一个带有一个 Activity 的简单 Android 应用。此活动下载一个小的 XML 文件并向用户显示内容。目前我在 Activity 的 onStart 方法中开始下载。

据我了解,当设备方向发生变化时,Activity 会被销毁并重新创建。因此,当用户旋转我的应用程序时,会再次下载 XML 文件。我希望该应用程序只下载一次文件,因为它每天更改的次数不会超过几次。因此,我想要一些对象来保留下载的数据,以便在设备方向发生变化时可以重新使用本地数据。 Android 中保留数据的理想对象是什么?

在 iOS 上,我会使用 AppDelegate 下载数据一次并保留它。然后显示数据的 viewController 可以在本地数据被销毁和重新创建时重新使用它。

【问题讨论】:

    标签: android ios uiapplicationdelegate


    【解决方案1】:

    您必须创建自己的 Application 子类并在 AndroidManifest.xml 中指定它。 之后,将创建此类的新实例,并且可以在整个应用程序中访问。

    例子:

    Manifest.xml

    <application name="YourApp"> 
    

    YourApp.java

    public class YourApp extends Application {
        private String yourState;
     
        public void setState(String state){
            yourState = state;
        }
        public String getState(){
            return yourState;
        }
     }
     
    

    YourActivity.java

     public class YourActivity extends Activity {
        @Override
        public void onCreate(Bundle bundle){
            YourApp appState = ((YourApp)getApplicationContext());// you can use getApplication() as well in the activity
            String state = appState.getState();
        }
     }
    

    More info about Application

    【讨论】:

    • 发生类转换异常!
    • 只是提到YourAppYourActivity 应该有public 访问权限
    【解决方案2】:

    让你的主类实现ProcessLifecycleObserver

    它相当于 iOS 中的 AppDelegate,因为它在应用进程的基础上“总结”了活动处理程序,如 onCreateonResume

    https://developer.android.com/reference/android/arch/lifecycle/ProcessLifecycleOwner

    【讨论】:

      【解决方案3】:

      您应该创建一个模型对象(您自己的类)来在 iOS 和 android 上保留数据。恕我直言。

      【讨论】:

        【解决方案4】:

        我假设你已经看过这个页面:

        http://developer.android.com/guide/topics/data/data-storage.html#pref

        根据 XML 文件中的数据类型(如果它是相当简单的数据),使用“共享首选项”可能是一种简单的方法。您可以在需要时从 XML 重写新数据,同时仍然可以从共享首选项中使用它。

        【讨论】:

        • 看起来很有希望,谢谢。 Android 中是否有任何对象具有类似于applicationDidFinishLaunchingapplicationWillEnterForeground 等的应用生命周期回调?
        • 抱歉,我不知道除了 android 活动回调(如 onStart、onResume、onPause 等)之外的任何应用程序回调:developer.android.com/reference/android/app/Activity.html
        • 您好,请参阅服务概述developer.android.com/guide/components/services onStartCommand() 中带有 START_REDELIVER_INTENT 的 IntentService 是您在下载文件时需要的。我希望我对您有所帮助
        猜你喜欢
        • 2011-10-29
        • 1970-01-01
        • 2013-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-12
        • 1970-01-01
        • 2015-11-01
        相关资源
        最近更新 更多