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。
我尝试了以下代码:-
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。