Я создаю приложение для работы, которое загружает изображение из галереи или самой камеры, а затем отображает изображение. Он работает для первых 4-6 изображений, но затем он дает мне java.lang.OutOfMemoryError
, показанный ниже.
Я искал формы и попытался использовать global.gc()
, а также добавил:
android:hardwareAccelerated="true"
android:largeHeap="true"
до манифеста android, и даже изменение размера изображения, однако, ничего не помогло.
Я не знаю, относится ли это к делу, но я использую nativescript-sqlite
для хранения текста, а также ссылку на место хранения изображений. Так что, может быть, кто-то с опытом работы с sqlite может сказать мне, есть ли у sqlite возможность генерировать этот тип ошибки
Буду очень признателен за любые мысли или идеи, такие как, как go о отслеживании утечек памяти или любого другого ввода, было бы замечательно !!
Код, используемый для загрузки / сделайте снимок
Существует три метода, последние два вызывают первый, в котором проблема, я считаю.
public imageProcessing(imageAsset): Promise<any> {
// Converting it to an ImageSource object
return new Promise((resolve, reject) => {
const source = new ImageSource();
//It does NOT get past the following line
// ######################################
source.fromAsset(imageAsset)
.then((imageSource: ImageSource) => {
// Sets the new image to the correct variables
let base64Picture = imageSource.toBase64String("jpeg", 75);
this.itemPictureSource = imageSource;
this.base64_picture_original = base64Picture;
// Analyzes the picture
resolve("Picture finishing analysis");
})
.catch(err => {
console.log("The error is:")
console.log(err)
reject();
})
})
}
public onChoosePictureTap(): void {
this.imageFromLibrary = true
let context = imagepicker.create({mode: "single" });
context.authorize().then(() => {
return context.present();
})
.then((selection) => {
let imageAsset = selection[0];
this.imageProcessing(imageAsset)
})
}
private getPicture(): Promise<any> {
let pictureOptions: CameraOptions = {
saveToGallery: true,
allowsEditing: true,
keepAspectRatio: true,
height: 800,
width: 600
}
return new Promise((resolve, reject) => {
requestPermissions().then(() => {
// Taking the picture
takePicture(pictureOptions).then((imageAsset: ImageAsset) => {
this.imageProcessing(imageAsset)
.then(() => { resolve() })
.catch(() => { reject() })
}, (error) => {
reject("Problem with taking a picture")
});
},
() => reject("Camera Permissions rejected")
);
})
}
Ошибка
AssetPicturePageComp…ent.ngfactory.js:21
ERROR Error: java.lang.OutOfMemoryError: Failed to allocate a 18662412 byte allocation with 6832792 free bytes and 6MB until OOM
dalvik.system.VMRuntime.newNonMovableArray(Native Method)
android.graphics.BitmapFactory.nativeDecodeByteArray(Native Method)
android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:613)
android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:636)
com.tns.Runtime.callJSMethodNative(Native Method)
com.tns.Runtime.dispatchCallJSMethodNative(Runtime.java:1242)
com.tns.Runtime.callJSMethodImpl(Runtime.java:1122)
com.tns.Runtime.callJSMethod(Runtime.java:1109)
com.tns.Runtime.callJSMethod(Runtime.java:1089)
com.tns.Runtime.callJSMethod(Runtime.java:1081)
com.tns.NativeScriptActivity.onActivityResult(NativeScriptActivity.java:53)
android.app.Activity.dispatchActivityResult(Activity.java:7226)
android.app.ActivityThread.deliverResults(ActivityThread.java:4521)
android.app.ActivityThread.handleSendResult(ActivityThread.java:4568)
android.app.ActivityThread.-wrap22(ActivityThread.java)
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1706)
android.os.Handler.dispatchMessage(Handler.java:102)
android.os.Looper.loop(Looper.java:154)
android.app.ActivityThread.main(ActivityThread.java:6688)
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
ERROR Error: java.lang.OutOfMemoryError: Failed to allocate a 44769200 byte allocation with 8609656 free bytes and 8MB until OOM
com.tns.Runtime.callJSMethodNative(Native Method)
com.tns.Runtime.dispatchCallJSMethodNative(Runtime.java:1242)
com.tns.Runtime.callJSMethodImpl(Runtime.java:1122)
com.tns.Runtime.callJSMethod(Runtime.java:1109)
com.tns.Runtime.callJSMethod(Runtime.java:1089)
com.tns.Runtime.callJSMethod(Runtime.java:1081)
com.tns.NativeScriptActivity.onActivityResult(NativeScriptActivity.java:53)
android.app.Activity.dispatchActivityResult(Activity.java:7226)
android.app.ActivityThread.deliverResults(ActivityThread.java:4521)
android.app.ActivityThread.handleSendResult(ActivityThread.java:4568)
android.app.ActivityThread.-wrap22(ActivityThread.java)
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1706)
android.os.Handler.dispatchMessage(Handler.java:102)
android.os.Looper.loop(Looper.java:154)
android.app.ActivityThread.main(ActivityThread.java:6688)
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)