android中获取Application实例的正确方法

问题描述 投票:0回答:2

获取Application实例哪种方式更合适

  1. 在Application.onCreate()中初始化静态字段并提供对其的静态访问

     public class MyApplication extends Application {
    
         private static MyApplication sInstance;
    
         @Override
         public void onCreate() {
             super.onCreate();
             sInstance = this;
         }
    
         public static MyApplication getInstance() {
             return MyApplication.sInstance;
         }
     }
    
     public class MyBroadcastReceiver extends BroadcastReceiver {
         @Override
         public void onReceive(Context context, Intent intent) {
             MyApplication application = MyApplication.getInstance();
         }
     }
    
  2. 创建以 Context 作为参数的静态方法,并将该 Context 转换为 MyApplication

     public class MyApplication extends Application {
    
         @Override
         public void onCreate() {
             super.onCreate();
         }
    
         public static MyApplication getInstance(Context context) {
             return ((MyApplication) context.getApplicationContext());
         }
     }
    
     public class MyBroadcastReceiver extends BroadcastReceiver {
         @Override
         public void onReceive(Context context, Intent intent) {
             MyApplication application = MyApplication.getInstance(context);
         }
     } 
    
  3. 按照示例 2 进行操作,但它没有静态访问 MyApplication

     public class MyBroadcastReceiver extends BroadcastReceiver {
         @Override
         public void onReceive(Context context, Intent intent) {
             MyApplication application = (MyApplication) context.getApplicationContext();
         }
     }
    
android applicationcontext
2个回答
7
投票

如果您需要应用程序的实例,我会推荐方法 3。

如果您的 Application 类中有其他方法,我会推荐方法 1,因为您可以更清楚地执行

MyApplication.getInstance().foo();

方法2只是方法3的捷径,所以我不推荐它。


总而言之,这是一个偏好问题。没有一种“正确”的方法,因为它们都会起作用。


3
投票
(getActivity().getApplication() as MyApplication)

这将返回 MyApplication 的实例

© www.soinside.com 2019 - 2024. All rights reserved.