2011-07-28 48 views
0

我編寫了這個應用程序,它在第一個屏幕中包含了一個包含線程。所以我把它定時爲7秒,然後它會繼續下一個活動。即使按下主頁按鈕或返回按鈕,Android應用程序也會重新開始並繼續進行下一個活動

問題是,每當我點擊主頁按鈕音樂將停止,它會去android主屏幕,但是我的時間完成後,這是7秒,應用程序將重新出現,並將顯示下一個活動。

我試過把finish();放在onpause();中,但它仍然顯示下一個活動。

這裏是實際的代碼。

public class HelloWorldActivity extends Activity { 
    MediaPlayer mp; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.splash); 
     mp = MediaPlayer.create(this, R.raw.otj); 
     mp.start(); 

     Thread LogoTimer = new Thread(){ 
      public void run(){ 
       try{ 
        int LogoTimer = 0; 
       while(LogoTimer < 7000){ 
        sleep(100); 
        LogoTimer = LogoTimer + 100; 


        } 


       startActivity(new Intent("com.example.HelloWorld.CLEARSCREEN")); 
       } catch (InterruptedException e) { 

        e.printStackTrace(); 
       } 

        finally{ 
        finish(); 
        } 

      } 
     }; 
     LogoTimer.start(); 

    } 

    @Override 
    protected void onDestroy() { 
     // TODO Auto-generated method stub 
     super.onDestroy(); 
     mp.release(); 



    } 

    @Override 
    protected void onPause() { 
     // TODO Auto-generated method stub 
     super.onPause(); 
     mp.pause(); 
    } 

    @Override 
    protected void onResume() { 
     // TODO Auto-generated method stub 
     super.onResume(); 
    } 

    @Override 
    protected void onStop() { 
     // TODO Auto-generated method stub 
     super.onStop(); 
    } 
} 

回答

2

首先,這是一個非常低效的運行計時器的方法。試試這個方法:

new Handler().postDelayed(new Runnable() { 

    public void run() { 
     // Do some work. 
    } 

}, delayTimeInMs); 

第二,當你開始一個新的活動時,該定時器最終會觸發。發起活動完成並不重要。你的startActivity()運行在它自己的線程上,並且不管它執行什麼。

可能postDelayed()方法的功能就像你期望的那樣。如果沒有,你需要檢查它是否應該真正開始活動。但是,我認爲Handler被附加到默認的Looper上,這意味着如果主要活動結束,它將停止(或者更確切地說,不會發布消息)。

+0

我下面的教程所以這就是我所遵循的。我要離開這些方法?像onpause();的onStop();的onDestroy();等等。對不起,如果我不得不問,我真的只是一個在Android上的初學者。 – regi

+0

是的,這些方法看起來不錯。我沒有做任何媒體播放器的工作,所以我不知道推薦的方式來獲得它並釋放它。我會試圖將MediaPlayer.create()放在onStart()中,並將它釋放到onStop()而不是onDestroy()中。 –

+0

好吧,我得到它的工作,當我嘗試點擊主頁按鈕時,它不會再返回到應用程序。謝謝。現在我可能需要一本適合Android的Java書,因爲YouTube上的教程並不是那麼好。 – regi

2

應用程序仍然在後臺,線程不會被銷燬,因此它會觸發startActivity。

我不會真的使用這種方式設置啓動畫面,或者使用線程,除非我因爲某種原因想要將它從UI中取出,即使那裏有更好的選項。

教育目的,以照顧這需要能夠安全地終止線程的onPause(),這樣做的一個方法是下面

體改主題

Thread LogoTimer = new Thread() { 

    private volatile boolean abortThread = false; 

     public void run(){ 

     long stopAt = System.currentTimeMillis() + 7000; 

     while (!abortThread && stopAt > System.currentTimeMillis()) 
      yield(); 

     if (!abortThread) 
      startActivity ... 
    } 

    public synchronized void stopThread() { 
     abortThread = true; 
    } 
}; 
+0

我應該在哪裏放置startActivity? – regi

+0

哦同樣的地方,這只是一個框架,告訴你如何停止線程,但在這裏我會爲你修改,支持 – Idistic

+0

@regi - 見上面,但也注意到Walt的第一個使用runnable的解決方案可能是因爲你沒有做任何真正的工作,所以更好的爲你的目的,我只是告訴你如何解決這個問題,如果你確實有一個線程 – Idistic

相關問題