2017-12-02 27 views
-2

이 문제로 인해 응용 프로그램이 약간 화면이 멈추는 중입니다.건너 뛰기 프레임! 응용 프로그램이 주 스레드에서 너무 많은 작업을 수행하고 있습니다.

loader를 사용하여 imageView 및 textView가 포함 된 listView를 채우고 있습니다.

로더가 JSON을 구문 분석하고 제목과 같은 이미지 URL을 추출하면 listView가 채워집니다.

프레임을 건너 뛰는 문제를 일으킬 수있는 코드를 검색 한 결과 약간의 시간이 걸렸으며 사진을 채울 때 lagg가 표시된다는 것을 알았습니다.

그래서 내가 사진을 선물하는 데 사용하는 코드를 게시 할 것입니다. 그리고 누군가가 내 코드가 더 나을 수 있고 왜 실제로 내 코드가 나쁜지 말할 수 있다면 말해 주시겠습니까?

ImageView album = (ImageView) listItemView.findViewById(R.id.albumID); 
    StrictMode.ThreadPolicy policy = new 
    StrictMode.ThreadPolicy.Builder().permitAll().build(); 
    StrictMode.setThreadPolicy(policy); 

    try { 

     Bitmap bitmap = BitmapFactory.decodeStream((InputStream) new URL(currentSong.getImage_url()).getContent()); 


     album.setImageBitmap(bitmap); 

    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

답변

0

오오 신 오 오 신 오 제발. 부디. 번호 :

당신은 안드로이드 규칙과 가이드 라인에 반대 할 것입니다.

1) 99.99 %의 시간 동안 ThreadPolicy를 수정할 필요가 없습니다. 그러니 정확히 무엇을하는지 모르는 경우가 아니라면하지 마십시오.
2) 결코 UI 스레드에서 API 호출을하지 마십시오. 이것이 앱이 정지 된 이유입니다.

비동기 호출을하고 이미지 데이터를 가져온 다음 ImageView에로드해야합니다.

이 작업을 수행 할 수있는 라이브러리가 많이 있으며 원활하게 처리 할 수 ​​있습니다. "Glide", "Universal Image Loader", "Picasso"로 인터넷 검색을 시도하십시오.

현재 이미지가로드되는 동안 UI 업데이트를 처리하는 스레드가 잠겨 있습니다. 그래서 이미지가로드되는 동안 스크롤링, 터치 등을 포함하여 UI로 아무 것도 할 수 없습니다.

+0

로더를 사용하면 onLoadFinished()가 호출 될 때 listview를 업데이트합니다. –