В своём приложении я произвожу объёмные вычисления, а именно сравнения соответствующих пикселей на фото. Обе фотографии всегда имеют разрешение 1440х900. Это всё производится в отдельном потоке, в итоге приложение вылетает без ошибки и обои на смартфоне меняются всё время на одни и те же. С чем это связано?
private void macPRC(Thread loading) {
loading.start();
photo();
Thread DH = new Thread(() -> {
prcD = eql(DBmp);
prcH = eql(HBmp);
});
Thread JMk = new Thread(() -> {
prcJ = eql(JBmp);
prcMk = eql(MkBmp);
});
Thread MlP1 = new Thread(() -> {
prcMj = eql(MlBmp);
prcP1 = eql(P1Bmp);
});
Thread P2S = new Thread(() -> {
prcP2 = eql(P2Bmp);
prcS = eql(SBmp);
});
DH.start();
JMk.start();
while(DH.isAlive() || JMk.isAlive()){
try {
Thread.sleep(1000);
} catch (Exception ignored){}
}
MlP1.start();
P2S.start();
while(MlP1.isAlive() || P2S.isAlive()){
try {
Thread.sleep(1000);
} catch (Exception ignored){}
}
int max1 = Math.max(prcH, prcD);
int max2 = Math.max(max1, prcJ);
int max3 = Math.max(max2, prcMk);
int max4 = Math.max(max3, prcMl);
int max5 = Math.max(max4, prcP1);
int max6 = Math.max(max5, prcP2);
PRC = Math.max(max6, prcS);
isLoading = false;
motionHome.transitionToEnd();
}
Вот сам метод eql, в неё передаются Bitmap изображения которые уже есть в проекте, и она сравнивает каждое из них с изображением которое уже выбрано в галлерее.
private int eql(Bitmap modelH){
int k = 0;
Bitmap model = modelH;
model = reSize(model);
int width = model.getWidth(), height = model.getHeight();
for(int i = 0; i < width; i++){
for(int j = 0; j < height; j++){
int pxlModel = model.getPixel(i, j);
int pxlImage = imageBitmap.getPixel(i, j);
if(pxlModel == pxlImage){
k++;
}
}
}
int sum = width * height;
double it = k * 100 * 2.1;
double prc = (it / sum) + 11;
if (prc > 100){
prc = 100;
}
return (int)prc;
}
Метод maxPRC запускается в отдельном потоке.
Логи:
Accessing hidden method Lsun/misc/Unsafe;- >getObject(Ljava/lang/Object;J)Ljava/lang/Object; (greylist, linking, allowed)
2021-07-12 18:40:10.795 21940-22061/com.example.cringemetr W/mple.cringemet: Accessing hidden method Lsun/misc/Unsafe;->getLong(Ljava/lang/Object;J)J (greylist,core-platform-api, linking, allowed)
2021-07-12 18:40:10.796 21940-22061/com.example.cringemetr W/mple.cringemet: Accessing hidden method Lsun/misc/Unsafe;->putInt(Ljava/lang/Object;JI)V (greylist, linking, allowed)
2021-07-12 18:40:11.078 21940-21987/com.example.cringemetr V/FA: Not logging ad unit exposure. Less than 1000 ms. exposure: 263
2021-07-12 18:40:11.078 21940-21987/com.example.cringemetr V/FA: Not logging ad exposure. Less than 1000 ms. exposure: 263
2021-07-12 18:40:12.060 21940-22024/com.example.cringemetr W/mple.cringemet: Accessing hidden method Lsun/misc/Unsafe;->putObject(Ljava/lang/Object;JLjava/lang/Object;)V (greylist, linking, allowed)
2021-07-12 18:40:12.131 21940-22024/com.example.cringemetr W/mple.cringemet: Accessing hidden method Lsun/misc/Unsafe;->getObject(Ljava/lang/Object;J)Ljava/lang/Object; (greylist, linking, allowed)
2021-07-12 18:40:12.187 21940-21940/com.example.cringemetr I/DynamiteModule: Considering local module com.google.android.gms.ads.dynamite:0 and remote module com.google.android.gms.ads.dynamite:211512000
2021-07-12 18:40:12.187 21940-21940/com.example.cringemetr I/DynamiteModule: Selected remote version of com.google.android.gms.ads.dynamite, version >= 211512000
2021-07-12 18:40:14.197 21940-21953/com.example.cringemetr I/mple.cringemet: NativeAlloc concurrent copying GC freed 2805(239KB) AllocSpace objects, 0(0B) LOS objects, 49% free, 6299KB/12MB, paused 476us total 117.778ms
2021-07-12 18:40:17.492 21940-21987/com.example.cringemetr V/FA: Inactivity, disconnecting from the service
2021-07-12 18:40:18.303 21940-21940/com.example.cringemetr I/mple.cringemet: Starting a blocking GC NativeAlloc
2021-07-12 18:40:18.365 21940-21940/com.example.cringemetr I/mple.cringemet: Waiting for a blocking GC NativeAlloc
2021-07-12 18:40:18.388 21940-21940/com.example.cringemetr I/mple.cringemet: WaitForGcToComplete blocked NativeAlloc on HeapTrim for 22.479ms
2021-07-12 18:40:18.388 21940-21940/com.example.cringemetr I/mple.cringemet: Starting a blocking GC NativeAlloc
2021-07-12 18:40:20.368 21940-21940/com.example.cringemetr I/mple.cringemet: Starting a blocking GC NativeAlloc
2021-07-12 18:40:20.414 21940-21940/com.example.cringemetr I/mple.cringemet: Waiting for a blocking GC NativeAlloc
2021-07-12 18:40:20.505 21940-21953/com.example.cringemetr I/mple.cringemet: NativeAlloc concurrent copying GC freed 2723(191KB) AllocSpace objects, 0(0B) LOS objects, 49% free, 6236KB/12MB, paused 114us total 132.174ms
2021-07-12 18:40:20.506 21940-21940/com.example.cringemetr I/mple.cringemet: WaitForGcToComplete blocked NativeAlloc on HeapTrim for 91.797ms
2021-07-12 18:40:20.506 21940-21940/com.example.cringemetr I/mple.cringemet: Starting a blocking GC NativeAlloc
2021-07-12 18:40:24.568 21940-21940/com.example.cringemetr I/mple.cringemet: Starting a blocking GC NativeAlloc
2021-07-12 18:40:24.693 21940-21940/com.example.cringemetr I/mple.cringemet: Waiting for a blocking GC NativeAlloc
2021-07-12 18:40:24.853 21940-21953/com.example.cringemetr I/mple.cringemet: NativeAlloc concurrent copying GC freed 3513(368KB) AllocSpace objects, 0(0B) LOS objects, 49% free, 6283KB/12MB, paused 174us total 284.326ms
2021-07-12 18:40:24.854 21940-21940/com.example.cringemetr I/mple.cringemet: WaitForGcToComplete blocked NativeAlloc on HeapTrim for 161.000ms
2021-07-12 18:40:24.854 21940-21940/com.example.cringemetr I/mple.cringemet: Starting a blocking GC NativeAll
OutOfMemoryError- картинки большие, а память на java-стороне ограничена намного меньшим объёмом чем общий размер RAM устройства. – woesss Jul 07 '21 at 11:01*- ниже будет крэш-лог – woesss Jul 08 '21 at 03:48