2016-03-03 5 views
0

Какой из этих способов является более правильным для получения экземпляра заявкиПравильный способ получить экземпляр заявки на андроид

  1. Initialise статического поля в 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. Создать статический метод, который принимает контекст, как пары и отбрасывать, что контекст для 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); 
        } 
    } 
    
+0

Я не понимаю одну вещь здесь. Если вы действительно хотите «Контекст» в «BroadcastReceiver», тогда 'onReceive (контекст контекста, ...)' уже предоставляет в качестве первого параметра. Используйте это. –

+0

Я никогда не видел способ 2, но для меня это не имеет смысла, потому что если у вас есть контекст, вы можете сделать getApplicationContext –

ответ

2

Я бы порекомендовал метод 3, если вам только нужен экземпляр приложения.

Я бы порекомендовал метод 1, если вы имели дополнительные методы в своем классе приложений, потому что вы можете более четко сделать

MyApplication.getInstance().foo(); 

Метод 2 это просто ярлык для метода 3, так что я бы не рекомендовал его.


В целом, это вопрос предпочтения. Нет никакого «правильного» способа, потому что все они будут работать.

1

Если вы действительно хотите использовать экземпляр Application, тогда вы оба ошибаетесь. Это приведет к блокировке при одновременном доступе экземпляра. Таким образом, чтобы преодолеть это и улучшить производительность лучше использовать synchronized

посмотрите мой путь ниже

public static MyApplication getInstance() { 
    if (sInstance == null) { 
     synchronized (MyApplication.class) { 
      if (sInstance == null) { 
       sInstance = new MyApplication(); 
      } 
     } 
    } 

    return applicationInstance; 
} 

sInstance, что вы инициализирован в onCreate(...)

Смежные вопросы