Java 如何从基本应用程序访问方法?
我扩展了“Application”类并创建了自定义方法“doSomething”。我使用manifest将这个类设置为整个应用程序的基类。现在,我如何从MainActivity访问这个“doSomething”方法Java 如何从基本应用程序访问方法?,java,android,Java,Android,我扩展了“Application”类并创建了自定义方法“doSomething”。我使用manifest将这个类设置为整个应用程序的基类。现在,我如何从MainActivity访问这个“doSomething”方法 public class App extends Application { public void something() { //do nothing } } 舱单: <?xml version="1.0" encoding="u
public class App extends Application {
public void something()
{
//do nothing
}
}
舱单:
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.test"
xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:name=".App"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
很简单,在您的
主要活动中
使用getApplication()
方法
((App)getApplication()).doSomething();
很简单,在您的
主要活动中
使用getApplication()
方法
((App)getApplication()).doSomething();
最好创建
Singleton
和类似的访问
private volatile static App applicationInstance;
public static App getInstance() {
if (applicationInstance == null) {
synchronized (App.class) {
if (applicationInstance == null) {
applicationInstance = new App();
}
}
}
return applicationInstance;
}
像
App.getInstance().something();
我总是这样做。最好创建
单例
和类似的访问
private volatile static App applicationInstance;
public static App getInstance() {
if (applicationInstance == null) {
synchronized (App.class) {
if (applicationInstance == null) {
applicationInstance = new App();
}
}
}
return applicationInstance;
}
像
App.getInstance().something();
我总是这么认为。应用程序类也是父应用程序上下文。因此,无论您在哪里可以访问
上下文
,都可以尝试访问自定义应用程序
类
在下面的示例中,MyApp
扩展了Application
并具有doSomething()
方法:
final Context appCtx = context.getApplicationContext();
if(appCtx instanceof MyApp){
final MyApp app = (MyApp) appCtx;
app.doSomething();
}
应用程序类也是父应用程序上下文。因此,无论您在哪里可以访问
上下文
,都可以尝试访问自定义应用程序
类
在下面的示例中,MyApp
扩展了Application
并具有doSomething()
方法:
final Context appCtx = context.getApplicationContext();
if(appCtx instanceof MyApp){
final MyApp app = (MyApp) appCtx;
app.doSomething();
}
您将通过getApplication()方法获取应用程序实例。您可以通过以下方式强制转换到应用程序中并调用应用程序类中的任何公共方法:
((App)getApplication()).doSomething();
您将通过getApplication()方法获取应用程序实例。您可以通过以下方式强制转换到应用程序中并调用应用程序类中的任何公共方法:
((App)getApplication()).doSomething();
您可以执行以下操作以准备好应用程序的实例:
private static App sInstance;
public static synchronized App getInstance() {
return sInstance;
}
@Override
public void onCreate() {
super.onCreate();
sInstance = this;
}
然后您将能够执行以下操作:
App.getInstance().something();
您可以执行以下操作以准备好应用程序的实例:
private static App sInstance;
public static synchronized App getInstance() {
return sInstance;
}
@Override
public void onCreate() {
super.onCreate();
sInstance = this;
}
然后您将能够执行以下操作:
App.getInstance().something();
检查两次
if(applicationInstance==null){
在synchronized
块之前和之后的目的是什么?检查两次if(applicationInstance==null){
在synchronized
块之前和之后的目的是什么?