乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      關于Activity銷毀,而繪制UI的子線程未銷毀出現(xiàn)的問題

       quasiceo 2016-07-25

      關于Activity銷毀,而繪制UI的子線程未銷毀出現(xiàn)的問題

      項目總結

      ---------------------------------------------------------------------------------------------------------

      有一個功能模塊,需要播放音頻,畫一個簡單的界面

      一個例子:

      我們都知道播放音頻要用到MediaPlayer類,我這里,不需要開啟Service,就在本Activity播放音頻,當Activity銷毀的時候,音頻便結束

      但是有一個重點,需要即時的變化當前播放的時間

      我的思路是,開啟一個線程,計算當前音頻的剩余播放時間,如果>0 則用Handler循環(huán)發(fā)送一個消息來更改時間UI

      復制代碼
      Thread tPlay ;
      tPlay = new Thread(new Runnable() {
                  @Override
                  public void run() {
                      int time = (mPlay.getDuration()-mPlay.getCurrentPosition())/1000;  // 獲得當前的音頻的剩余時間,總時長-當前播放時長
                      while(time>0&&mPlay!=null) {                                       // 如果剩余時間>0 并且MediaPlayer對象存在,就需要沒0.2秒更新一下時間UI
                          try {
                              Thread.sleep(200);
                              time = (mPlay.getDuration()-mPlay.getCurrentPosition())/1000; //獲得當前時間
                              final int finalTime = time;
                              handler.post(new Runnable() {
                                  @Override
                                  public void run() {
                                      topic_play_time.setText(finalTime /60+"'"+ finalTime %60); //更改UI
                                  }
                              });
                          } catch (InterruptedException e) {
                              e.printStackTrace();
                          }
                      }
                  }
              });
      復制代碼

       

      然后有線程對象了,什么時候start呢,必然是在第一次播放音頻的時候,而且只能start一次。

       

      那么問題來了。當我播放音頻的時候,或者暫停已經(jīng)播放一段的音頻的時候,用戶可能會退出Activity ,

      而Activity銷毀了,但是這個Activity開啟的計算時間更改UI的子線程還存在,它還需要循環(huán)計算剩余時間,但是MediaPlayer對象沒了,就報錯了。

       

      所以,解決方法只能是銷毀Activity之前結束這個Activity開啟的子線程。

      試過幾種方法,最后選定了一個最簡單,最易理解的方法:

      1、設置一個全局標記變量boolean flag = true;

      2、線程中while 循環(huán)判斷 flag 是否為true,是則執(zhí)行內部代碼,否則不執(zhí)行,結束循環(huán)了,即線程也隨之結束了

      復制代碼
      tPlay = new Thread(new Runnable() {
                  @Override
                  public void run() {
                      int time = (mPlay.getDuration()-mPlay.getCurrentPosition())/1000;
                      while(time>0&&mPlay!=null&&flag) {
                      }
                  }
              });
      復制代碼

       

      3、在Activity銷毀的

      @Override
      protected void onDestroy() {
          super.onDestroy();
          isflag=false;
      }

       

      方法中更改flag,那么線程中while條件則不成立,線程就結束了,也不會再報錯了。

       

      貼一下關鍵代碼:

      關鍵代碼

       

      posted @ 2015-11-12 20:42 聽著music睡 閱讀(499) 評論(10) 編輯 收藏
      評論列表
        
      #1樓 2015-11-12 21:04 KillU  
      為什么進程都推出了 線成還在?
        
      #2樓[樓主] 2015-11-12 21:34 聽著music睡  
      @ KillU
      實際上線程還是存在的,可以做個測試,開啟一個子線程 while 死循環(huán) 來設置一個TextView 文本信息,看看退出進程后,是不是會報錯
        
      #3樓 2015-11-12 22:10 奔跑的蝸牛丶  
      播放視屏之前 VideoView是不是黑的?樓主有碰到這種情況嗎?
        
      #4樓[樓主] 2015-11-12 22:12 聽著music睡  
      @ 奔跑的蝸牛丶
      是播放界面出來之前黑的閃一下,還是黑到播放界面出來,還是你視頻播放自動到轉橫屏并閃黑一下
        
      #5樓 2015-11-12 22:13 奔跑的蝸牛丶  
      @ 聽著music睡
      播放界面出來之后,沒有播放視頻一直是黑的。
        
      #6樓[樓主] 2015-11-13 08:38 聽著music睡  
      @ 奔跑的蝸牛丶
      那就是代碼出問題了,看下VideoView使用步驟,一般沒有這種情況的。
        
      #7樓 2015-11-17 16:28 掌握當下  
      沒必要開線程。。。
        
      #8樓[樓主] 2015-11-17 21:18 聽著music睡  
      @ 掌握當下
      請教下不開線程的情況下該怎么處理,我的思維這個情況一般要開線程。。。
        
      #9樓 2015-11-18 14:33 掌握當下  
      更新UI本質上不在子線程上操作,UI操作必須在UI主線程中進行~可以用handler或者postdelay。。。方法很多~你的子線程中的post方法不就是為了把UI更新放到主線程中操作嗎~
        
      #10樓[樓主] 2015-11-18 19:01 聽著music睡  
      @ 掌握當下
      說的對,忽視這點了

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多