Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从基本应用程序访问方法?_Java_Android - Fatal编程技术网

Java 如何从基本应用程序访问方法?

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

我扩展了“Application”类并创建了自定义方法“doSomething”。我使用manifest将这个类设置为整个应用程序的基类。现在,我如何从MainActivity访问这个“doSomething”方法

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
块之前和之后的目的是什么?