각 항목에 ProgressBar
및 ImageButton
이 포함 된 ListView
이 있습니다. 그러나 일부 장치에서는 OutOfMemoryError가 목록 어댑터의 getView()
구현에서 발생합니다. full stacktrace입니다. 오류가 아래에 주어진다 발생진행 표시 줄이있는 getView()의 OutOfMemoryError
줄 다음과 같이 목록 항목에 대한
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView != null) {
holder = (ViewHolder) convertView.getTag();
} else {
if (mDrawable == null)
mDrawable = mContext.getResources().getDrawable(R.drawable.progress);
LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
convertView = inflater.inflate(R.layout.test_list_item, parent, false); // The crash occurs here.
holder = new ViewHolder(convertView);
holder.progressBarEpisodes.setProgressDrawable(mDrawable);
}
// Show season name.
refreshProgress(position, holder);
...
}
private void refreshProgress(int position, ViewHolder holder) {
holder.progressBarEpisodes.setMax(Integer.parseInt(items.get(position).getTotal()));
holder.progressBarEpisodes.setProgress(Integer.parseInt(items.get(position).getProgress()));
}
내 레이아웃 XML은 다음과 같습니다
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/list_item_selector"
android:paddingLeft="16dp"
android:paddingRight="8dp">
<LinearLayout
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:orientation="vertical"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:paddingRight="16dp">
....
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="4dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:progress="50"/>
</LinearLayout>
<ImageButton
android:id="@+id/imageButton"
android:layout_width="wrap_content"
android:layout_height="match_parent"
style="@style/EpisodeActionButton"
android:focusable="false"
android:background="@drawable/list_item_selector_no_alpha"
android:progressDrawable="@drawable/progress"/>
</LinearLayout>
을 또한,이 같은 진행률 표시 줄 스타일을 정의했습니다 :
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@android:id/background">
<shape>
<solid
android:color="@color/gray_500"/>
</shape>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<solid
android:color="@color/secondary_500" />
</shape>
</clip>
</item>
</layer-list>
이 충돌 문제의 해결 방법을 도와 줄 수 있습니까? android.graphics.BitmapFactory.decodeStream에서 android.graphics.BitmapFactory.nativeDecodeAsset (BitmapFactory.java)에서 java.lang.OutOfMemoryError와 을 :에 의한
:
어떤 종류의 휴대 전화를 테스트하고 있습니까? listview의 모든 행에서 진행률 표시 줄을 업데이트하면 메모리 측면에서 꽤 부담 스럽습니다. – VicVu
사실, 내 장치에서 충돌을 재현 할 수 없었습니다. 충돌은 HTC One의 Crashlytics와 SYMPHONY W130 (XPLORERW130) –