2013-02-09 3 views
0

특정 인터벌 루프에서 이미지를 표시하는 데 사용되는 핸들러가 있으며 마지막 이미지에 도달하면 올바른 첫 번째 이미지로 돌아갑니다. 그러나 일부 장치가 충돌을 일으키고 CPU 사용량이 현저히 증가하게되므로 문제가 발생합니다. 코드에 무엇이 문제가 있는지 궁금합니다.Android SDK : 일부 기기에서 충돌을 일으키는 핸들러

내가 조각의 상단에 다음과 같이 인스턴스화 : 위의 AsyncTask를 호출 할 때

@Override 
     protected void onPostExecute(Void v) { 

      if(!isRunning) { 
      Runnable runnable = new Runnable() { 

       @Override 
       public void run() { 



        anImageView.setVisibility(View.VISIBLE); 
        isRunning = true; 
        counter++; 

        //imageDownloader.download(data.get(i).getImageURL(), anmageView); 
        if(TabsViewPagerFragmentActivity.theImages !=null && TabsViewPagerFragmentActivity.theImages.size() > 0){ 
        Bitmap anImage = TabsViewPagerFragmentActivity.theImages.get(i); 
        anImageView.setImageBitmap(anImage); 
        } 

        i++; 
        if(i>TabsViewPagerFragmentActivity.theImages.size()-1) 
        { 
        i=0;  
        } 



        handler.postDelayed(this, 1500); 
       } 




      }; 
      handler.postDelayed(runnable, 0); 




      } 

     } 

: AsyncTask를의 onPostExecute 부분에 다음

final public static Handler handler = new Handler(); 
boolean isRunning = false; 

,이 코드가 onCreate() 메서드 내에서. 둘째, 주기적으로 변경되는 최신 이미지를 얻기 위해 이미지를 다시 다운로드하는 새로 고침 단추가 있습니다. 따라서 새로 고침 단추에 연결된 onClick() 이벤트가 있습니다. 이것은 또한 잘 작동하지만 여기에 호출되는 코드는 다음과 같습니다.

@Override 
    protected void onPostExecute(Void v) { 

     for(int i=0;i<data.size()-1;i++) { 

      Bitmap anImage = getBitmapFromURL(data.get(i).getImageURL()); 
      theImagesRefreshed.add(anImage); 

     } 



     if(!isRunning) { 
      Runnable runnable = new Runnable() { 

       @Override 
       public void run() { 



        anImageView.setVisibility(View.VISIBLE); 
        isRunning = true; 
        counter++; 

        //imageDownloader.download(data.get(i).getImageURL(), anImageView); 
        if(theImagesRefreshed !=null && theImagesRefreshed.size() > 0){ 
        Bitmap anImage = theImagesRefreshed.get(i); 
        anImageView.setImageBitmap(anImage); 
        } 

        i++; 
        if(i>theImagesRefreshed.size()-1) 
        { 
        i=0;  
        } 



        handler.postDelayed(this, 1500); 
       } 




      }; 
      handler.postDelayed(runnable, 0); 


     } 


    } 

나는 핸들러가 올바르게 설정되지 않았으며 성능 문제를 일으키는 것으로 생각합니다. 누구든지이 코드가 잘못된 것을 볼 수 있습니까?

미리 감사드립니다.

답변

0

당신은 쓰기 .SO 스레드에 Looper.prepare()를 핸들러를 사용하는 동안의 Runnable

+0

감사의 인스턴스를 생성 한 후 내가 – Dave

+0

를 보이지 않았다 것을 시도 할 것이다 Looper.prepare()를 호출 할 필요가 불행하게도 - 안드로이드 OS가 앱을 떠난 후에 애플리케이션을 죽인다 – Dave

+0

크래시 로그를 넣을 수 있습니까 ?? – Payal

관련 문제