【发布时间】:2019-02-12 07:08:10
【问题描述】:
我使用自定义布局创建了一个列表视图,但每次快速滚动时,应用程序都会崩溃,并在 Logcat 中出现以下错误。
我还没有真正尝试过任何东西,因为我还不熟悉 Android。
我尝试将android:hardwareAccelerated="false" 和android:largeHeap="true" 添加到AndroidManifest.xml 中,但仍然没有。
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_view_switch_account,null);
TextView first = (TextView)convertView.findViewById(R.id.full_name);
ImageView img = (ImageView)convertView.findViewById(R.id.profile_picture);
Account account = accountList.get(position);
first.setText(account.getName());
byte[] imgs = account.getImage();
Bitmap bitmap = BitmapFactory.decodeByteArray(imgs,0,imgs.length);
img.setImageBitmap(bitmap);
// status.setText(account.getStatus());
return convertView;
}
}
java.lang.OutOfMemoryError: Failed to allocate a 3481968 byte allocation with 1143504 free bytes and 1116KB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.BitmapFactory.nativeDecodeByteArray(Native Method)
at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:622)
at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:645)
at com.example.mgimoro.dietgo.AccountAdapter.getView(AccountAdapter.java:51)
at android.widget.AbsListView.obtainView(AbsListView.java:2497)
at android.widget.ListView.makeAndAddView(ListView.java:1930)
at android.widget.ListView.fillDown(ListView.java:722)
at android.widget.ListView.fillGap(ListView.java:686)
at android.widget.AbsListView.trackMotionScroll(AbsListView.java:5792)
at android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3705)
at android.widget.AbsListView.onTouchMove(AbsListView.java:4221)
at android.widget.AbsListView.onTouchEvent(AbsListView.java:3991)
at android.view.View.dispatchTouchEvent(View.java:9480)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2662)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2304)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2668)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2318)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2668)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2318)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2668)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2318)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2668)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2318)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2668)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2318)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2668)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2318)
【问题讨论】:
-
你在AndroidManifest.xml文件中的application标签里试过
android:largeHeap="true"吗? -
是的,我也试过了,但它仍然崩溃
-
可能你的位图很大,尝试异步加载位图或者使用像glide或者picasso这样的库