android - 在 Application 中获取 MainActivity 的引用
问题描述
我有Application
课VTS
和 MainActivity
。我需要MainActivity
在Application
VTS
课堂上获得参考并调用MainActivity's
方法show(String t)
。如何获得对aaa
变量的引用?
<application
android:name=".VTS"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
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>
public class VTS extends Application
{
MainActivity aaa;
@Override
public void onCreate() {
super.onCreate();
}
}
public class MainActivity extends AppCompatActivity {
public void show(String t)
{
//...
}
}
解决方案
老实说,我不确定您为什么要从 Application 类调用活动的方法,但无论如何,您可以在应用程序类中设置对活动的弱引用。
我没有对此进行测试,但这是我认为可行的一种方式。为简单起见,这假设您没有处理并发问题。
public class VTS extends Application
{
static WeakReference<MainActivity> aaa;
@Override
public void onCreate() {
super.onCreate();
}
public static void setMainActivity( MainActivity activity ) {
if ( aaa != null ) {
aaa.clear() ;
}
if ( activity != null ) {
aaa = new WeakReference< MainActivity >( activity );
}
}
public MainActivity getMainActivity() {
if ( aaa == null || aaa.get() == null ) {
Log.e("VTS", "Main activity is null");
throw new RunTimeException("Main activity is null") ;
}
}
public void someMethodThatCallsMainActivity() {
try {
getMainActivity().show( "Hello world!" ) ;
} catch ( Exception e ) {
e/printStackTracer() ;
}
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate( Bundle savedInstanceState ) {
super.onCreate( savedInstanceState );
...
VTS.setMainActivity( this ) ;
}
@Override
protected void onDestroy() {
super.onDestroy();
...
VTS.setMainActivity( null ) ;
}
public void show(String t)
{
//...
}
}
推荐阅读
- forms - Symfony Dependance 必填字段的表单
- typescript - 错误 TS2304:使用 karma-typescript 时找不到名称“地图”
- angular5 - 如何仅在最大长度问题上显示错误?
- c# - Winform c#组合框边框就像我程序中的一个洞
- c# - emgucv c# CPU消耗高
- java - 无法从服务启动服务
- php - 如何对具有不同字符集的 php 数组进行单元测试?
- python - 用python编写的装饰器实际上是什么?
- javascript - 如果 Javascript 中的属性未设置或错误,则获取默认值
- ios - 尽管没有在表格视图中实现尾随滑动动作,但删除按钮会在滑动时自动实现