【问题标题】:Android extends Application and make an instance of itAndroid 扩展 Application 并创建它的实例
【发布时间】:2015-10-30 20:59:00
【问题描述】:

我尝试了以下代码:-

public class LocationApplication extends Application {

public LocationInfo locationInfo;
public int myInt;
@Override
public void onCreate() {
    super.onCreate();
   }
}

public int getInt(){  
    someMethod(context);
    return myInt;
   }
}

稍后在其他一些活动中,我必须获取位于 LocationApplication 类中的 myInt。请注意,我不能将 myInt 设为静态。所以不知何故我必须有一个 LocationApplication 类的实例。那么如何创建一个由框架调用链初始化的 LocationApplication 实例(意味着 onCreate() 是由框架调用的)。

还有什么其他建议可以实现这个目标吗?

【问题讨论】:

    标签: android extend


    【解决方案1】:

    在 Android 中,子类化 Application 类时,您必须告诉框架您想使用它。该框架将仅保留您的 Application 子类的 1 个实例您可以通过将以下属性添加到 AndroidManifest.xml 中的 application 标记来实现:

    android:name="com.example.android.LocationApplication"
    

    com.example.android 替换为您自己的 packageId。

    您的清单可能如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.android" >
    
        <application
            android:name="com.example.android.LocationApplication"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name" >
    
            <!-- Omitted the rest of the XML -->
    
        </application>
    
    </manifest>
    

    接下来,在您的Activity(或从Context 扩展的任何内容)中,您调用getApplication()。将其转换为 LocationApplication,您就可以访问您的 Application 对象。

    在你的情况下可能看起来像这样:

    // In your Activity (or anything that extends Context)
    LocationApplication application = (LocationApplication) getApplication();
    int value = application.getInt()
    

    【讨论】:

    • 让我们想象一下我是如何制作类 LocationApplication 成员的 public static int myInt;我可以直接获取 LocationApplication.myInt 吗?而不是调用 LocationApplication application = (LocationApplication) getApplication();应用程序.myInt?或者建议总是调用 getApplication() 来获取它
    • 由于框架管理LocationApplication的实例,我建议始终通过getApplication()访问实例。您可以在此处阅读有关 Application 课程的更多信息:developer.android.com/reference/android/app/Application.html
    【解决方案2】:

    将 Application 类设为静态并获取对其的引用。

    例如

    public class LocationApplication extends Application {
    
        private static LocationApplication instance;
    
        private int myInt;
    
        @Override
        public void onCreate() {
            super.onCreate();
            instance = this;
        }
    
        public static LocationApplication getInstance() {
            return instance;
        }
    
    
        public int getInt() {
            return myInt;
        }
    
    }
    

    然后从您的代码中,访问如下方法:

    int TheInt= LocationApplication.getInstance().getInt();
    

    您可以从代码中的任何地方调用它,而不仅仅是可以调用 getApplication() 的地方

    您需要在清单中注册该类。

    【讨论】:

      【解决方案3】:

      如何制作Application类的实例?

      清单文件内部

      <application android:name="fully qualified name of your application class"
       .............................
       ............................../>
      

      通过像这样在清单文件中声明扩展应用程序类的类,将创建您自定义的应用程序类的实例,现在当您想要访问您的应用程序类时 在 Activity 中,您可以简单地,

      MyApplication mApplication = (MyApplication)getApplication();
      

      现在您可以在 mApplication 上调用 getInt。

      【讨论】:

        猜你喜欢
        • 2016-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-04
        • 2014-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多