我扩展了#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()
{
}
}
答案 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();