Android 扩展应用程序并创建它的实例

Android extends Application and make an instance of it

我尝试了以下代码:-

public class LocationApplication extends Application {

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

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

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

对于实现这个目标还有什么建议吗?

使应用程序 class 静态化并获取对其的引用。

例如

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() 的地方

您需要在清单中注册 class。

在 Android 中,当子 classing Application class 时,您必须告诉框架您想要使用它。该框架将仅保留 Application subclass 的 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()

如何创建应用实例class?

在清单文件中

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

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

MyApplication mApplication = (MyApplication)getApplication();

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