0

我有一個由後臺服務啓動的活動,以顯示服務從服務器接收的滾動消息。可以一次只滾動一個滾動消息或一組多個滾動消息。這種活動的線程是什麼類型?

我的問題是什麼是管理循環滾動多條消息和多組多條消息的理想方式?我嘗試過的工作線程中我PCR儀循環,的AsyncTask等

的詳細信息:

我的滾動活動接收消息(S)顯示,作爲其提供的字符串數組訪問從服務的範圍。說,例如,在服務啓動,以滾動幾個消息,一個又一個的活動:

  1. 我的服務填充MyService.messages[]與以顯示消息,然後開始MyScrollActivity
  2. MyScrollActivity獲得大小MyService.messages[]。如果> 1,啓動MyCyclerThread(或的AsyncTask等 - 還沒有想出最好的辦法!)
  3. MyCyclerThread遍歷MyService.messages[]並設置MyScrollActivity的TextView與messages[i],並在同一時間跨屏動畫一次,一個消息迭代(一個消息滾動,然後是下一個,等等 - 在循環結束時,它從i=0開始並重新重複消息
  4. 步驟3重複,直到活動被服務取消或顯示另一活動。 cycler-thread(或任何 - 循環)需要在此時死掉。

我希望特定的工作線程(即循環)死掉,並且每當活動停止時都不會返回。但由於某種原因,無論何時活動重新啓動(例如顯示新的一批消息),舊的循環程序/工作者線程都會復活,併爲新消息重新啓動一個新循環。

我已經嘗試將Thread.currentThread().interrupt()添加到活動的和onDestroy方法中,並且我在日誌中看到該線程確實被中斷。但就像我說的那樣,它會復活(即使使用它之前的相同ID)並再次啓動它的循環。這意味着無論多少'X'次我開始我的活動,我也得到'X-1'線程數的運行。

我玩過Activity單實例XML,各種「isThreadABCrunning」標誌等。我甚至嘗試過使用我的循環器循環的AsyncTask。我正在用盡想法。

幫助,我是Android的初學者/中級...顯然,我知道這足以造成麻煩。有什麼我失蹤的線程或活動?這可能像處理我的活動一樣簡單嗎?

我非常感謝一個30,000英尺的概述,然後我可以根據需要提供代碼示例(我經歷了太多次的迭代來確定一個現在在這裏發佈),所以對不起,如果我踩接近違反職位的最佳做法。

更新:動畫代碼

slide = new TranslateAnimation(dm.widthPixels, -params.width, 0, 0); 
    slide.setDuration(animDuration); 
    slide.setRepeatCount(repititions); 
    slide.setRepeatMode(Animation.RESTART); 
    slide.setInterpolator(new LinearInterpolator()); 
    slide.setAnimationListener(new Animation.AnimationListener() { 
     @Override 
     public void onAnimationStart(Animation animation) { 
      msgIsScrolling = true; 
     } 
     @Override 
     public void onAnimationEnd(Animation animation) { 
      msgIsScrolling = false; 
     } 
     @Override 
     public void onAnimationRepeat(Animation animation) { 
      //nothing to do 
     } 
    }); 
    textView_message.startAnimation(slide); 

回答

1

我的直覺反應是,「多線程」的解決方案來解決這個問題的錯誤的方式。我首先想到的是:

  • 更改您的設計,使該活動只是要求爲「下一個」信息顯示(活動應該不知道有多少消息或什麼樣的信息索引它的上,它應該服務只需顯示該服務提供的任何消息)。
  • 使用Animator.AnimatorListeneronAnimationEnd()方法重新觸發動畫。

從本質上講,你需要在活動中有一些方法來接收消息並啓動動畫。無論您何時首次顯示活動以及何時滾動完成消息,都會調用此方法。

由於這一切都生活在活動本身內部,活動消失時不應該進行任何清理。

+0

那麼,我的活動必須產生某種線程才能讓動畫實際運行。對我來說,讓Activity處理自己的任務(如顯示一條或多條消息)更有意義(感覺更「乾淨」)。必須有一種方法可以做到這一點......無論是這樣,還是你完全滿意,我都不會有一個整潔的邏輯線索。 – csr19us

+0

Android的動畫框架不應該要求您產生任何線程。你如何執行動畫? –

+0

Ben,我用我的動畫邏輯更新了帖子 – csr19us