2017-01-25 40 views
0

我扩展了“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> 

编辑:首先,感谢你所有的答案,但我要对不起我的输入。我忘了提及,我想以与覆盖相同的方式访问它。为什么?因为我要在“App”中初始化一些东西(它需要几ms),并且只能在之后,我可以继续在MainActivity中使用这些值。

现在我使用“BaseActivity”,其中init用户访问数据库。但是每个活动都开启了似乎浪费时间的“新”连接。我只需要登录到数据库一次,并为所有活动使用此参考。这就是为什么我在“BaseActivity”中创建方法“dataReady”,使用“BaseActivity”扩展“MainActivity”并将方法“dataReady”覆盖到init适配器和其他东西。

public class BaseActivity extends Activity { 

    void dataReady() 
    { 

    } 
} 

public class MainActivity extends BaseActivity { 

    @Override 
    void dataReady() 
    { 

    } 
} 

回答

0

这很简单,在你的Main Activity使用getApplication()方法

((App)getApplication()).doSomething(); 
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(); 

我总是这样。

+0

是什么'synchronized'块前后检查两次'如果(applicationInstance == NULL){'一个的目的是什么? –

0

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

在下面的例子中,MyApp延伸Application并具有doSomething()方法:

final Context appCtx = context.getApplicationContext(); 

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

您将通过getApplication()方法中获得了应用实例。您可以浇铸成应用程序并调用任何公开的方法的应用类中由

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

你可以做以下准备好您的应用程序的一个实例:

private static App sInstance; 

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

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

然后你就可以做:

App.getInstance().something(); 
相关问题