2012-04-25 3 views
0

В моем приложении для Android все работает отлично, за исключением случаев, когда я нажимаю кнопку «Домой» и жду 10-15 минут и возвращаюсь в приложение, экран пуст. Я все еще могу получить доступ к пунктам меню, но экран просто черный.Android onResume Blank Screen

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

Любые идеи?

Я поместил сообщения Toast по пути, когда приложение возобновится, и оно доходит до последнего выполнения кода. Поэтому я не знаю, что происходит.

Кроме того, когда экран остается пустым, нажав назад или дома вызывает принудительное закрытие

EDIT: Добавление исключения при нажатии кнопки домой:

04-25 15:12:09.625: E/AndroidRuntime(6351): java.lang.RuntimeException: Unable to pause activity {com.MyApp/com.MyAppMain.MainScreen}: java.lang.NullPointerException 
04-25 15:12:09.625: E/AndroidRuntime(6351):  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2731) 
04-25 15:12:09.625: E/AndroidRuntime(6351):  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2678) 
04-25 15:12:09.625: E/AndroidRuntime(6351):  at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:2651) 
04-25 15:12:09.625: E/AndroidRuntime(6351):  at android.app.ActivityThread.access$1700(ActivityThread.java:132) 
04-25 15:12:09.625: E/AndroidRuntime(6351):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1045) 
04-25 15:12:09.625: E/AndroidRuntime(6351):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-25 15:12:09.625: E/AndroidRuntime(6351):  at android.os.Looper.loop(Looper.java:150) 
04-25 15:12:09.625: E/AndroidRuntime(6351):  at android.app.ActivityThread.main(ActivityThread.java:4263) 
04-25 15:12:09.625: E/AndroidRuntime(6351):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-25 15:12:09.625: E/AndroidRuntime(6351):  at java.lang.reflect.Method.invoke(Method.java:507) 
04-25 15:12:09.625: E/AndroidRuntime(6351):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
04-25 15:12:09.625: E/AndroidRuntime(6351):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
04-25 15:12:09.625: E/AndroidRuntime(6351):  at dalvik.system.NativeStart.main(Native Method) 
04-25 15:12:09.625: E/AndroidRuntime(6351): Caused by: java.lang.NullPointerException 
04-25 15:12:09.625: E/AndroidRuntime(6351):  at com.MyAppMain.MainScreen.onPause(MainScreen.java:110) 
04-25 15:12:09.625: E/AndroidRuntime(6351):  at android.app.Activity.performPause(Activity.java:3935) 
04-25 15:12:09.625: E/AndroidRuntime(6351):  at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1313) 
04-25 15:12:09.625: E/AndroidRuntime(6351):  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2708) 
04-25 15:12:09.625: E/AndroidRuntime(6351):  ... 12 more 




import localytics.localytics.android.LocalyticsSession; 

импорта android.app.Activity; импорт android.content.Intent; import android.location.Location; import android.os.Bundle; импорт android.view.Menu; импорт android.view.MenuInflater; импорт android.view.MenuItem; импорт android.view.View; импорт android.widget.ImageButton; import android.widget.Toast; импорт com.myapp.R; импорт com.WhiteLabel.tools.Globals; import com.WhiteLabel.tools.LocationService.LocationResult; импорт com.WhiteLabel.tools.PreferenceHelper;

общественный класс LoadingScreen extends Деятельность { защищено Местонахождение currentLocation; частное приложение ApplicationClass; private ImageButton btnLocal; private ImageButton btnNational; private ImageButton btnDOD; частный ImageButton btnДестинации; частная местность Местная локализацияSession;

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    try 
    {   
     //final Activity activity = this; 
     application = ApplicationClass.getInstance();  
     setTheme(application.appTheme); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.loading_screen); 

     application.addressSaved = false; 

     InitializeControls(); 

     // String notifytime = PreferenceHelper.GetNotificationTime(this); 

     InitializeLocalytics(true); 

     Toast.makeText(this, "Use the menu button to access your account.", Toast.LENGTH_LONG).show(); 
    } 
    catch(Exception ex) 
    {   
     String s = ex.toString(); 
    } 
} 

@Override 
protected void onResume() 
{  
    try 
    {  
     super.onResume(); 

     //if(!Globals.isRelease) 
      //Toast.makeText(this, "Hit onresume on loading screen.", Toast.LENGTH_LONG).show(); 

     if(this.localyticsSession!=null) 
      this.localyticsSession.open(); 

     Intent extrasIntent = getIntent(); 

     if(extrasIntent!=null) 
     {   
      Bundle extras = extrasIntent.getExtras(); 

      if(extras!=null) 
      {        
       String message = extras.getString("load_directive"); 

       if(message.equalsIgnoreCase("notification")) 
       { 
        getIntent().putExtra("load_directive", ""); 

        String s = message; 
        GetDDClick(); 
       } 
      } 
     } 

     if(!Globals.isRelease) 
      Toast.makeText(this, "Hit after extras intent.", Toast.LENGTH_LONG).show(); 

     //TODO - check for null application obj 
     if(application.loadFailed) 
     { 
      application.loadFailed = false; 
      Toast.makeText(getBaseContext(), "Connection issue. Please verify you are connected to the internet!", Toast.LENGTH_LONG).show();    
     } 

     if(!Globals.isRelease) 
      Toast.makeText(this, "Hit end of onresume.", Toast.LENGTH_LONG).show(); 

    } 
    catch(Exception ex) 
    { 
     if(!Globals.isRelease) 
      Toast.makeText(this, "onResume error: "+ex.toString(), Toast.LENGTH_LONG).show(); 
    } 
} 

public void onPause() 
{ 
    try 
    {  
     this.localyticsSession.close();  
     this.localyticsSession.upload();  
    } 
    catch(Exception ex) 
    { 
     if(!Globals.isRelease) 
      Toast.makeText(this, "onPause error:"+ex.toString(), Toast.LENGTH_LONG).show(); 
    }  

    super.onPause(); 
} 

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) 
{ 
    super.onSaveInstanceState(savedInstanceState); 
    // your stuff or nothing 
} 

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) 
{ 
    super.onRestoreInstanceState(savedInstanceState); 
    // your stuff or nothing 
} 

private void InitializeControls() 
{ 
    btnLocal = (ImageButton)findViewById(R.id.btnLocal); 
    btnNational = (ImageButton)findViewById(R.id.btnNational); 
    btnDOD = (ImageButton)findViewById(R.id.btnDOD); 
    btnDestinations = (ImageButton)findViewById(R.id.btnDestinations); 

    btnLocal.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { GetLocalClick(); }}); 
    btnNational.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { GetNationalClick(); }}); 
    btnDOD.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { GetDDClick(); }}); 
    btnDestinations.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { GetDestinationsClick(); }}); 
} 

private void InitializeLocalytics(Boolean instantiate) 
{ 
    if(instantiate) 
     this.localyticsSession = new LocalyticsSession(this.getApplicationContext(),Globals.LocalyticsAppKey);   

    this.localyticsSession.open();  // open the session 
    this.localyticsSession.tagScreen("Main Menu"); 
    this.localyticsSession.upload();  // upload any data 
} 

private void GetLocalClick() 
{ 
    application.loadingButtonPressed = "local"; 
    // set application var to local 
    GoToDDView(); 
} 

private void GetNationalClick() 
{ 
    application.loadingButtonPressed = "national"; 
    application.currentDivision = "national"; 
    // set application var to national 
    GoToDDView(); 
} 

private void GetDDClick() 
{ 
    application.loadingButtonPressed = "daily"; 
    GoToSelectedView(); 
} 

private void GetDestinationsClick() 
{ 
    application.loadingButtonPressed = "travel"; 
    GoToDDView(); 
} 

private void GoToDDView() 
{ 
    Intent getResultsWindow = new Intent(LoadingScreen.this, Daily.class); 
    startActivity(getResultsWindow); 
} 

private void GoToSelectedView() 
{ 
    Intent getResultsWindow = new Intent(LoadingScreen.this, DailySelected.class); 
    startActivity(getResultsWindow); 
} 

private void GoToHomeServices() 
{ 
    Intent getResultsWindow = new Intent(LoadingScreen.this, MainMenu.class); 
    startActivity(getResultsWindow); 
} 

private void GoToMyAccount() 
{ 
    Intent configIntent = new Intent(this,MyAccount.class); 
    startActivity(configIntent); 
} 

public boolean onCreateOptionsMenu(Menu menu) 
{ 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.loadingscreenmenu, menu); 
    return true; 
} 

public boolean onOptionsItemSelected (MenuItem item) 
{ 
    switch (item.getItemId()) 
    {     
     case R.id.PROFILE: 
      GoToMyAccount(); 
      return true; 
     case R.id.MYVOUCHERS: 
      Intent loadVouchersIntent = new Intent(this, Vouchers.class); 
      startActivity(loadVouchersIntent); 
      return true; 
    } 

    return false; 
} 

}

+0

Можете ли вы опубликовать трассировку стека из FC? –

+0

Хм, может быть, полезно разместить логарифм от силы закрытия? Это может дать нам некоторые подсказки. Возможно, также поможет размещение некоторых из onCreate/onResume. – Gophermofur

+0

ОК, я получил исключение из logcat и разместил его выше – Jesse

ответ

1

Когда приложение переходит на задний план, он может быть убит, когда устройство работает из памяти. Возможно, это часть вашей проблемы.

Вы можете использовать savedInstanceState для сохранения состояния приложения.

+0

Это, возможно, сработало, еще не сработало ... но все еще тестирование, чтобы убедиться, и я должен ждать его, так что он отстой, занимает некоторое время – Jesse

+0

Это не работает – Jesse

+0

Можете ли вы опубликовать код своей деятельности MainScreen? – timoschloesser