Я создал пользовательский объект View
, который переопределяет метод onDraw
для рисования довольно активного пользовательского интерфейса. Я добавляю 5 этих пользовательских представлений на LinearLayout, , но только один вид виден в любой момент.Проблемы с производительностью при хранении нескольких растровых изображений
В зависимости от действий пользователей внутри моего приложения, я переключаю свойство View.Visibility
на каждом, чтобы можно было видеть только один.
Просто для уточнения, метод, который я использую для меня, работает, и он кажется довольно отзывчивым. Меня немного волнует, как этот метод повлияет на устройства нижнего или нижнего уровня.
Вот пример моего текущего кода:
настраиваемое представление
public class MyDrawingView extends View {
private Bitmap mViewBitmap;
private int mWidth = 1024; // The width of the device screen
private int mHeight = 600; // Example value, this is dynamic
@Override
protected void onDraw(Canvas canvas) {
// Copy the in-memory bitmap to the canvas.
if(mViewBitmap != null) canvas.drawBitmap(mViewBitmap, 0, 0, mCanvasPaint);
}
private void drawMe() {
if(mViewBitmap == null) mViewBitmap = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(mViewBitmap);
c.drawBitmap(...);
c.drawText(...);
// Multiple different methods here drawing onto the canvas
c.save();
}
}
Layout XML
<LinearLayout>
<com.company.project.ui.MyDrawingView
android:id="@+id/myCustomView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.company.project.ui.MyDrawingView
android:id="@+id/myCustomView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.company.project.ui.MyDrawingView
android:id="@+id/myCustomView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.company.project.ui.MyDrawingView
android:id="@+id/myCustomView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.company.project.ui.MyDrawingView
android:id="@+id/myCustomView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
Вопросы
- Должен ли я хранить эти 5 отдельных экземпляров моего представления с растровыми изображениями размером 1024x600 в памяти все время?
- Должен ли я объединить функциональность, так что мне нужно добавить только один вид в мой макет XML, а затем повторно сгенерировать растровое изображение каждый раз, когда View необходимо обновить?
- Какой вариант лучше для производительности, учитывая, что перерисовка моего растрового изображения может занять некоторое время из-за его сложности?
Документация
Я уже прочитал Android документации на Managing Bitmap Memory, но я чувствую, что я реализовывали моменты, изложенные уже в моей настраиваемое представление, и я не думаю, что это вполне покрывает мой сценарий.
Ваша самая большая проблема с недорогими устройствами будет размером с кучей. Ваши растровые изображения занимают память 1024 × 600 * 4 * 5 = 12 МБ (ARGB_8888). В устройствах с кучей 16 МБ это довольно большой кусок. Это предполагает, что изображения также имеют разрешение 1024x600. Если ваши значения являются динамическими, они могут вообще не вписываться в кучу. – Geobits
@Geobits То, что меня беспокоило. Итак, как избежать этого, сохраняя при этом производительность гладкой? – CodingIntrigue