2013-11-27 59 views
0

我遇到了一個奇怪的問題,停止我的Android應用程序。在我的手機上,我有一個主頁按鈕和一個返回按鈕,現在當我按下主頁按鈕後進入我的應用程序時,該程序按預期從互聯網加載數據,但當按下後退按鈕後進入我的應用程序時,數據不會加載。我已經調試到一定程度,並且發現唯一的區別是後退按鈕調用onCreate()方法。我很困惑爲什麼會發生這種情況。Android onCreate()不工作

下面是我的一些代碼:

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Log.d("DAP", "Created"); 

     setContentView(R.layout.activity_ltc); 

     getActionBar().setTitle("LTC Charts"); 
     getActionBar().setLogo(
       getResources().getDrawable(R.drawable.new_litecoin_logo_large)); 

     TextView textView = (TextView) findViewById(R.id.ltcdata); 
     textView.setText("Loading data..."); 

     TimerTask timer = new TimerTask() { 

      @Override 
      public void run() { 

       parseJSON(); 
      } 

     }; 

     Timer time = new Timer(); 
     time.schedule(timer, 500, 85); 

    } 

回答

0

這是因爲你的活動處理不當被摧毀。你應該做的是在你的活動中加入一些東西,以便在你回到活動時再次獲取數據。如果你想要確保數據被銷燬,並且用戶永遠不會離開活動,那麼你可以在onpause中銷燬所有的東西。

+0

onDestroyed被調用。這使我感到困惑,因爲當我按下後退按鈕onCreate()後,再次啓動應用程序時,程序無法按預期工作。 – Paldan

+0

林相當確定這是因爲後退按鈕彈出堆棧的活動,並完成活動,而主頁按鈕只是暫停一切,並逃脫應用程序。去其他的應用程序,並檢查他們的行爲。其中一些重新開放到你所在的位置,其他人將手動摧毀一切。 –

2

「當我按下後退按鈕後進入我的應用程序時,數據無法加載。」

如果您已經啓動了您的應用程序,那麼當您離開它時,活動將被暫停(並調用onPause)。當您回到應用程序時,將恢復同一活動實例(並調用onResume)。

http://developer.android.com/training/basics/activity-lifecycle/index.html

+1

按下後退按鈕後,活動將被終止。下面的活動方法被調用。 ()=> onStop()=> onDestroy() 重新啓動應用程序時,會調用以下活動生命週期方法。 onCreate()=> onStart()=> onResume() 參考下面的鏈接。 http://stackoverflow.com/questions/5019686/what-methods-are-invoked-in-the-activity-lifecycle-in-the-following-cases 那麼,爲什麼oncreate方法不會被調用?請澄清 – Prem

0

使用下面的繼續執行功能。

@Override 
public void onResume(){ 
    //will be executed onResume 
} 
0

正如別人所說,覆蓋onResume()

一個常見的模式是提取共同初始化代碼放到一個方法,並從那裏需要調用它:當我按下後退按鈕,但沒有主頁按鈕

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    init(); 
} 

@Override 
protected void onResume(){ 
    super.onResume(); 
    init(); 
} 

private void init(){  
    setContentView(R.layout.activity_ltc); 
    getActionBar().setTitle("LTC Charts"); 
    // .... 
}