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

时间:2017-01-25 09:36:40

标签: java android

我扩展了#34;应用程序"类和创建自定义方法" doSomething"。我使用manifest将此类设置为整个应用程序的基类。现在,我如何能够访问这个" doSomething" MainActivity的方法?

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>

编辑:首先,感谢您的所有答案,但我不得不抱歉。我忘了提到,我想以与Override相同的方式访问它。为什么?因为我要在&#34; App&#34;中初始化(需要几毫秒)。只有在之后,我才能继续在MainActivity中使用这些值。

现在我使用&#34; BaseActivity&#34;,它初始化用户访问数据库。但是每个活动都开放了#34; new&#34;似乎是浪费时间的联系。我只需要登录一次数据库,并将此引用用于所有活动。这就是我创建方法&#34; dataReady&#34;在&#34; BaseActivity&#34;,扩展&#34; MainActivity&#34;与&#34; BaseActivity&#34;和覆盖方法&#34; dataReady&#34;到init适配器和其他东西。

public class BaseActivity extends Activity {

    void dataReady()
    {

    }
}

public class MainActivity extends BaseActivity {

    @Override
    void dataReady()
    {

    }
}

5 个答案:

答案 0 :(得分:3)

最好创建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();

我总是这样做。

答案 1 :(得分:0)

很简单,使用Main Activity使用getApplication()方法

((App)getApplication()).doSomething();

答案 2 :(得分:0)

Application类也是父应用程序上下文。因此,在您可以访问Context的任何位置,您都可以尝试访问自定义Application类。

在下面的示例中,MyApp扩展了Application并拥有doSomething()方法:

final Context appCtx = context.getApplicationContext();

if(appCtx instanceof MyApp){
   final MyApp app = (MyApp) appCtx;
   app.doSomething();
}

答案 3 :(得分:0)

您将通过getApplication()方法获取应用程序实例。您可以通过

转换为App并在应用程序类中调用任何公共方法
((App)getApplication()).doSomething();

答案 4 :(得分:0)

您可以执行以下操作以准备好应用的实例:

private static App sInstance;

public static synchronized App getInstance() {
    return sInstance;
}

@Override
public void onCreate() {
    super.onCreate();
    sInstance = this;
}

然后你就可以做到:

App.getInstance().something();