2011-11-24 82 views
3

我的應用程序有3個類。第一類是閃屏,第二類包含播放列表的列表,第三類是播放列表的內容。當選擇播放列表時,第三類開始顯示播放列表內容。在第二類我:爲什麼調用onDestroy()方法?

@Override 
    protected void onStop() { 
     super.onStop(); 
     System.out.println("onStop Playlist!!!!"); 
    } 

    protected void onDestroy() { 
     super.onDestroy(); 
     System.out.println("onDestroy Playlist"); 
    } 

,當第三類是準備好開始,我得到DDMS消息:"onStop Playlist!!!!""onDestroy Playlist"。爲什麼要調用這個方法?不應該只調用方法?問題是,我想停止一些計時器,當應用程序正在完成時,但我不知道在這種情況下,我可以停止計時器。任何想法?

我把這樣的第三類:

Intent i = new Intent(getBaseContext(), ViewPlaylist.class); 
i.putExtra("id", idPlaylist[position]); 
i.putExtra("timer", timerPlaylist[position]); 
startActivity(i); 
finish(); 

的問題是,我打電話finish()

+0

它取決於你怎麼叫第三課(開始第三項活動)如果你顯示一些代碼,那麼我們可以幫助你 – user370305

+0

I e點了我的問題。 – Gabrielle

+0

你有沒有試過我的答案? – user370305

回答

0

因爲您正在完成與finish()的第二個活動。所以不是使用startActivityForResult()並在第二個活動覆蓋onActivityResult(),所以在這種情況下,你的第二個活動的onPause()將被調用,當你finish()第三活動,你可以回到你的第二個活動的onActivityResult()()方法

試試這個代碼.. 。

Intent i = new Intent(getBaseContext(), ViewPlaylist.class); 
i.putExtra("id", idPlaylist[position]); 
i.putExtra("timer", timerPlaylist[position]); 
startActivityForResult(i,RESULT_OK); 
2

如果你讀了Activity類(爲onDestroy()方法)的文檔會看到:

國際泳聯l在你的活動被破壞之前打電話給你。這可能是因爲活動正在完成(有人稱爲 finish(),或者因爲系統暫時銷燬此活動的實例以節省空間,您可以使用isFinishing()將這兩個方案區分爲 方法。

0

是的,你叫finish(),這將結束,從而摧毀該活動。只需卸下finish()電話。如果你想摧毀一個活動這只是必要的。

+0

在另一個項目中,每次我開始一個新的活動,我稱之爲完成()我解決了錯誤OOM – Gabrielle

+0

我刪除了完成()但onStop仍然被稱爲...爲什麼? – Gabrielle

+0

@Gabrielle'onStop()'被調用,因爲您的活動對用戶不再可見,具有播放列表內容的類將覆蓋它。這是Android應用程序的正常生命週期流程。在我的回答中,我提供了一個鏈接,您可以在這裏閱讀更多關於如何調用生命週期方法以及何時調用它們的信息。 – Luksprog

相關問題