2015-05-12 1 views
-2

Я делаю приложения с Linphone библиотеки, у меня есть код, чтобы бросить исключение в MainActivity так:Основная деятельность Instance иногда Бросьте Run Time Exception «LinphoneActivity не инстанцирован еще»

private static MainActivity instance; 

public static final boolean isInstanciated() { 
    return instance != null; 
} 

public static final MainActivity instance() { 
    if (instance != null) { 
     return instance; 
    } 
    throw new RuntimeException("LinphoneActivity not instantiated yet"); 
} 

экземпляра метод будет использоваться в другой деятельности (IncomingCallActivity и контактные данные деятельности)

Входящий вызов активности запустит, если есть вызов к телефону

if (!LinphoneManager.getInstance().acceptCallWithParams(mCall, params)) { 
      // the above method takes care of Samsung Galaxy S 
      Toast.makeText(this, R.string.couldnt_accept_call, Toast.LENGTH_LONG).show(); 
     } else { 
      if (!MainActivity.isInstanciated()) { 
       return; 
      } 
      final LinphoneCallParams remoteParams = mCall.getRemoteParams(); 
      if (remoteParams != null && remoteParams.getVideoEnabled() && LinphoneManager.getInstance().isAutoAcceptCamera()) { 
       MainActivity.instance().startVideoActivity(mCall); 
      } else { 
       MainActivity.instance().startIncallActivity(mCall); 
      } 
     } 

ContactDataActivity запустит, если пользователю выбрать меню контакта

private void doCall(String number) { 
     Log.d(TAG, "try to call here: " + number); 
     if (Account.isPrepaidRegistered()) { 
      MainActivity.instance().requestToCall(number); 
     } else { 
      Intent intent = new Intent(ContactDataActivity.this, PrepaidRegisterActivity.class); 
      startActivity(intent); 
     } 
    } 

Где каждый из этой деятельности необходимо вызвать экземпляр MainActivity для вызова метода в MainActivity к requestcall или выезд.

некоторое время при запуске приложения, LogCat покажет:

java.lang.RuntimeException: LinphoneActivity еще не инстанцирован

Это просто нормально, или есть что-то случилось с моим кодом ?

+0

Где вы называете метод 'instance()'? – Ircover

+0

В другом действии (операция входящего вызова), например: if (! MainActivity.isInstanciated()) { \t \t \t возвращение; \t \t \t} \t \t \t конечного LinphoneCallParams remoteParams = mCall.getRemoteParams(); \t \t \t если (remoteParams = NULL && remoteParams.getVideoEnabled() && LinphoneManager.getInstance() isAutoAcceptCamera (!).) { \t \t \t \t MainActivity.instance() startVideoActivity (MCALL). \t \t \t} еще { \t \t \t \t MainActivity.instance() startIncallActivity (MCALL). \t \t \t} – Redturbo

ответ

0

Никогда не пытайтесь создать экземпляр своей деятельности, поэтому андроидная фреймворк делает это за вас. Если вы хотите, чтобы ваша активность была однопользовательской, используйте lauchmodes в вашем фильтре намерений, а не в шаблоне проектирования singleton, есть много хороших уроков на lauchMode here, here и here

+0

Я разместил это в файле My Manifest: android: launchMode = "singleTask", поэтому я должен удалить метод экземпляра MainActivity instance()? – Redturbo

+0

Да, если одна задача - это то, что вы пытаетесь выполнить – nvinayshetty

+0

, но мне нужно вызвать этот метод instance() в другом действии, можете ли вы дать другое решение? – Redturbo

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