Titanium Android: образы и память - PullRequest
2 голосов
/ 23 марта 2012

У меня проблемы с использованием изображений в эмуляторе Android и Galaxy S2.Я не пишу нативно, я использую Titanium.

Если я закомментирую какие-либо ссылки на изображения в моем приложении, оно отлично работает.Я проверил на утечки памяти и не нашел ни одного.

Ошибка, которую я получаю в консоли:

I/dalvikvm-heap( 1867): Clamp target GC heap from 24.689MB to 24.000MB
E/GraphicsJNI( 1867): VM won't let us allocate 1183156 bytes
D/dalvikvm( 1867): GC_FOR_MALLOC freed <1K, 45% free 4499K/8135K, external 16311K/16603K, paused 48ms
E/TiDrawableReference( 1867): (main) [3335,78053] Unable to load bitmap. Not enough memory: bitmap size exceeds VM budget
E/TiDrawableReference( 1867): java.lang.OutOfMemoryError: bitmap size exceeds VM budget

Приложение отлично работает в iOS, есть какие-нибудь советы, чтобы лучше справитьсяуправление изображениями с помощью Titanium и Android?

SDK: 1.8.2 Время выполнения: V8

Ответы [ 3 ]

3 голосов
/ 09 января 2013

Это связано с проблемой памяти в эмуляторе.Самое простое решение - добавить следующие строки в файл tiapp.xml

<property name="ti.android.threadstacksize" type="int">131072</property>
<property name="ti.android.httpclient.maxbuffersize" type="int">131072</property>
1 голос
/ 17 июля 2018

Я решил эту проблему, добавив следующий код в tiapp.xml

<application android:largeHeap="true">

Посмотрите пример в разделе «Запрос большой кучи от Dalvik» в следующем URL:

https://docs.axway.com/bundle/Titanium_SDK_allOS_en/page/tiapp_xml_and_timodule_xml_reference.html#tiapp.xmlandtimodule.xmlReference-Androidspecificapplicationproperties

1 голос
/ 30 мая 2012

Что ж, это не проблема Titanium. Потому что Android не допускает файлы с высоким разрешением или изображения большого размера из галереи или externalStorage. Поэтому вы должны использовать сжатые изображения или изображение с измененным размером.Вам удачи ...

        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (resultCode == RESULT_OK) {
                if (requestCode == SELECT_PICTURE) {
                    Uri selectedImageUri = data.getData();
                    selectedImagePath = getPath(selectedImageUri);
                    File f = new File(selectedImagePath);
                    bmImg = decodeFile(f);//BitmapFactory.decodeFile(selectedImagePath, options);
                    takePhotoImg.setImageBitmap(imageManipulation.getResizedBitmap(
                            bmImg, 240, 160));

                    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
                    bmImg.compress(Bitmap.CompressFormat.JPEG, 40, bytes);

                    SimpleDateFormat s = new SimpleDateFormat("ddMMyyyyhhmmss");
                    timeStamp = s.format(new Date());
                    File f1 = new File("/sdcard/mysdfile"+ "test"+timeStamp+".jpg");
                    try {
                        f1.createNewFile();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    //write the bytes in file
                    FileOutputStream fo;
                    try {
                        fo = new FileOutputStream(f1);
                        try {
                            fo.write(bytes.toByteArray());
                            System.out.println("#########File is being Written=========!!!!!");
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    }
                }
            }   
        }
...