2013-01-23 100 views
4

我有一個應用程序與三個活動:splashscreen(默認),登錄,主。應用程序以飛濺啓動,幾秒鐘後更改爲登錄。如果登錄過程是正確的,那麼我們轉到main。活動不會從暫停返回

我的問題是登錄活動無法從暫停狀態恢復。當我點擊Home按鈕時,onPause()被正確調用,onDestroy()不被調用。然後,當試圖返回到應用程序時,它開始啓動,但從來沒有達到登錄,它只是回到主頁。 logcat不顯示任何錯誤,調試器表明應用程序仍然處於打開狀態(就像它應該)。飛濺和主屏幕上的行爲是預期的。

public class LoginActivity extends Activity { 
/* UI ELEMENTS */ 
private OnClickListener mOnClickListener; 

private EditText mPasswordField; 

private EditText mUserField; 

private ProgressDialog mProgressDialog; 

/* LOGIC ELEMENTS */ 
/** handler to update interface */ 
private static Handler sInterfaceUpdateHandler; 


public static class UpdateHandler extends Handler { 

    private final WeakReference<LoginActivity> mLogin; 

    UpdateHandler(final LoginActivity loginActivity) { 
     super(); 
     mLogin = new WeakReference<LoginActivity>(loginActivity); 
    } 

    /** 
    * handle events from other threads in UI thread. 
    * 
    * @param message message data. Property what determines action. 
    */ 
    @Override 
    public void handleMessage(final Message message) { 
     // STUFF HERE 
    } 


@Override 
public void onCreate(final Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.initializeInterface(); // fields filled here, listener added to buttons 
} 

編輯:活動創建在閃屏作爲每個請求

public class SplashScreen extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(final Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.setContentView(R.layout.splashscreen); 
    final Thread splashThread = new Thread() { 
     @Override 
     public void run() { 
      try { 
       int waited = 0; 
       while (waited < 2000) { 
        sleep(100); 
        waited += 100; 
       } 
      } catch (final InterruptedException catchException) { 
       LoggerFactory.consoleLogger().printStackTrace(catchException); 
      } 
      SplashScreen.this.finish(); 
      final Intent loginIntent = new Intent(SplashScreen.this, LoginActivity.class); 
      SplashScreen.this.startActivity(loginIntent); 
     } 
    }; 
    splashThread.start(); 
} 

}

+0

我認爲你需要調用startActicity呼籲LoginScreen –

+2

您的代碼是不相關的,以你描述的問題之前完成()。你的飛濺如何加載登錄活動? – Lieuwe

+0

final Intent loginIntent = new Intent(SplashScreen.this,LoginActivity.class); SplashScreen.this.startActivity(loginIntent); –

回答

3

找到並修復了錯誤。該活動在清單中標記爲SingleInstance。我將它改爲SingleTop,現在它按預期工作。病因

更多的文檔可以在這裏找到:http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

+0

將launchMode添加到哪個活動?主要?或登錄? –

+0

所有這些都嘗試避免SingleInstance,因爲它是一種非常適合不適合大多數應用程序的邊緣類型的活動。在過去的一年半里,我已經明白永遠不會使用它。 –

0

取出最後從SplashActivity並如下方框:

final Thread splashThread = new Thread() { 
    @Override 
    public void run() { 
     try { 
      int waited = 0; 
      while (waited < 2000) { 
       sleep(100); 
       waited += 100; 
      } 
     } catch (final InterruptedException catchException) { 
      LoggerFactory.consoleLogger().printStackTrace(catchException); 
     } 
      SplashScreen.this.finish(); 
      final Intent loginIntent = new Intent(SplashScreen.this, LoginActivity.class); 
      SplashScreen.this.startActivity(loginIntent); 
     } 
}; 
splashThread.start(); 
+0

它不起作用,相同的行爲。 –

+0

發佈您的登錄活動代碼。 – GrIsHu

+0

你需要哪部分?我無法發佈整個。 –

0

我沒有玩過多線程,但從它看起來對我來說,您正在從Splash Activity創建另一個線程,然後從該線程開始一個活動。然後,當你停下來時,你的新活動會以某種方式迷路或收集垃圾(也許是因爲它不在我不知道的主線程中),那麼當你回到上一個活動時,onCreate不會再被調用,因此你有這個永久的SplashScreen(如果我正確理解你的問題)。

編輯也我問你爲什麼你在那個線程內等待?

+0

這是一個閃屏,邏輯只是顯示一個圖像,並在X秒後,開始新的屏幕。代碼不是我的,它是從一個SO回答中獲得的。 –

+0

另外,問題不在於飛濺不會消失。它的確如此,它之後不會加載LoginActivity。 –