2013-07-03 48 views
0

我正在學習關於我自己的Android多線程和正在使用該簡報作爲主要資源:http://grail.cba.csuohio.edu/~matos/notes/cis-493/lecture-notes/Android-Chapter13-MultiThreading.pdf如何使用處理器與videoview

我試圖處理程序後的做法。在幻燈片38中,它提到需要有一個可運行的前臺和一個可運行的後臺。

如果我想讓我的前臺runnable成爲一個videoview,我需要將所有的videoview代碼放在try/catch中嗎?或者是創建一個videoview本身,創建一個可自行運行的前景? 還有另外一種方法可以解決這個問題嗎?

我非常感謝任何幫助,因爲我對java和android很新。

+0

我不知道你在做什麼,但你不需要處理程序或處理自己的線程來使用VideoView。 –

+0

我試圖在播放視頻時在後臺工作。然後在視頻的中間,我希望定時器停止並在videoview前面烤麪包/停止videoview。處理程序是否會爲此目的而工作?我認爲可能有一種方法可以在沒有線程的情況下執行此操作,但我想了解多線程如何與此迷你項目配合使用。 – Bethany

+0

是的,Handler會很適合這個。實現停止/烘烤的可執行文件,然後創建一個可在視頻持續時間的1/2後運行的處理程序。 –

回答

1

你並不需要使用Handlers/Threads實施VideoView在所有 - 這應該在UI線程就像正常的看法上運行。

從您的意見,但我明白這是一個學習練習,所以你可以執行一個Runnable任務,執行你需要它做的事情。這與你的VideoView沒有什麼關係,只是你想單獨執行。

例如:調用handler.postDelayed()

Handler handler = new Handler() 
handler.postDelayed(task, 5000); 

task的代碼將執行5秒我建議你得到一個VideoView

private Runnable task = new Runnable() { 
    public void run() { 
     Toast.makeText(getApplicationContext(), "HELLO!", Toast.LENGTH_LONG).show(); 
     videoView.stopPlayback(); 
    } 
}; 

然後,您可以通過撥打這個正常工作,然後添加你的處理程序。

1

首先查看前景vs背景android文檔以及活動如何工作。你不需要任何類型的視頻處理工作。視頻觀看是視圖。

然後看看哪些處理程序是,他們在這裏是如何工作 - http://developer.android.com/reference/android/os/Handler.html

對於你的任務 - 寫在你的活動一個單獨的處理程序,它負責爲您videoview像這樣 - 基本上聽的時間在視頻播放和然後一旦播放時間與您想要彈出烤麪包的時間相匹配就會彈出。

Handler handler = new Handler(); 
... 
handler.post(timefortoast); 
.... 

int curVideoPosition; 
    private final Runnable timefortoast= new Runnable() { 
     public void run() { 
      try { 
       if (video.isPlaying()) { 
        cumulativeTimeSpent += 1; 
       } 

       // prepare and send the data here.. 
       curVideoPosition = video.getCurrentPosition(); 
//Match cumulative time spent and curvideoposition to pop up whatever you want, toast or whatever in the middle of the video 

,然後卸下回調ondestroy

handler.removeCallbacks(timefortoast);