facundomedica / fast_qr_reader_view

A Fast QR Reader widget for Flutter. For both Android and iOS
MIT License
294 stars 163 forks source link

Plugin crashes Android app when switching between apps #3

Closed ghunter99 closed 5 years ago

ghunter99 commented 6 years ago

Thanks for adding the ability to scan different barcodes. Works brilliantly! I've run into a bug that I hope us easy reproduce.

  1. Everything works perfectly on iOS
  2. On Android scanning works but when I tap on the overview button to switch apps (that's the button on the bottom on the right side) the example program crashes with the following error:

F/libc (28681): Fatal signal 11 (SIGSEGV), code 1, fault addr 0x26780000 in tid 29800 (FirebaseMLHandl)


I get a similar error when using the Android emulator:

F/libc (14291): Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xabb36d70 in tid 14373 (FirebaseMLHandl), pid 14291 (yris.eddflutter)

Let me know if I can be of any assistance!

facundomedica commented 6 years ago

Thanks for the issue! I've got a couple of questions, because I'm not able to reproduce the bug.

  1. What are the characteristics and model of your device and emulator?
  2. What version of Flutter are you running?
  3. What is you host OS?
ghunter99 commented 6 years ago

Hi Thanks for checking this out. Hoping it's a configuration issue on my end but after some more testing I still get the same crash when I switch apps.

Here' s my Flutter doctor output:

Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel beta, v0.5.1, on Mac OS X 10.13.6 17G65, locale en-AU) [✓] Android toolchain - develop for Android devices (Android SDK 27.0.3) [✓] iOS toolchain - develop for iOS devices (Xcode 9.4.1) [✓] Android Studio (version 3.1) [✓] Connected devices (2 available)

• No issues found!


I'm using a standard emulator (I think) Nexus 5X API P Name: Nexus_5X_API_P CPU/ABI: Google Play Intel Atom (x86) Path: /Users/garyhunter/.android/avd/Nexus_5X_API_P.avd Target: google_apis_playstore [Google Play] (API level P) Skin: nexus_5x SD Card: 100M hw.dPad: no hw.lcd.height: 1920 runtime.network.speed: full hw.accelerometer: yes hw.device.name: Nexus 5X vm.heapSize: 256 skin.dynamic: yes hw.device.manufacturer: Google hw.lcd.width: 1080 image.androidVersion.codename: P hw.gps: yes hw.initialOrientation: Portrait image.androidVersion.api: 27 hw.audioInput: yes image.sysdir.1: system-images/android-P/google_apis_playstore/x86/ tag.id: google_apis_playstore showDeviceFrame: yes hw.camera.back: virtualscene hw.mainKeys: no AvdId: Nexus_5X_API_P hw.camera.front: emulated hw.lcd.density: 420 avd.ini.displayname: Nexus 5X API P hw.arc: false hw.gpu.mode: auto hw.device.hash2: MD5:bc5032b2a871da511332401af3ac6bb0 hw.ramSize: 1536 hw.trackBall: no PlayStore.enabled: true fastboot.forceColdBoot: no hw.battery: yes hw.cpu.ncore: 2 hw.sdCard: yes tag.display: Google Play runtime.network.latency: none hw.keyboard: yes hw.sensors.proximity: yes disk.dataPartition.size: 2G hw.sensors.orientation: yes avd.ini.encoding: UTF-8 hw.gpu.enabled: yes


The phone I test on is a Motorola G5S Plus running Android 7.1.1


Here's the output for the error when I run the test app on my device

Launching lib/main.dart on Moto G 5S Plus in debug mode... Initializing gradle... Resolving dependencies... Running 'gradlew assembleDebug'... registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection) registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection) registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection) Built build/app/outputs/apk/debug/app-debug.apk. I/FlutterActivityDelegate(23634): onResume setting current activity to this Syncing files to device Moto G 5S Plus... W/DynamiteModule(23634): Local module descriptor class for com.google.android.gms.vision.dynamite.barcode not found. I/DynamiteModule(23634): Considering local module com.google.android.gms.vision.dynamite.barcode:0 and remote module com.google.android.gms.vision.dynamite.barcode:0 D/BarcodeNativeHandle(23634): Cannot load feature, fall back to load whole module. W/DynamiteModule(23634): Local module descriptor class for com.google.android.gms.vision.dynamite not found. E/art (23634): The String#value field is not present on Android versions >= 6.0 I/DynamiteModule(23634): Considering local module com.google.android.gms.vision.dynamite:0 and remote module com.google.android.gms.vision.dynamite:1702 I/DynamiteModule(23634): Selected remote version of com.google.android.gms.vision.dynamite, version >= 1702 W/System (23634): ClassLoader referenced unknown path: D/ApplicationLoaders(23634): ignored Vulkan layer search path /data/app/com.google.android.gms-1/lib/arm:/data/app/com.google.android.gms-1/base.apk!/lib/armeabi-v7a for namespace 0xadfaf090 D/ApplicationLoaders(23634): ignored Vulkan layer search path /data/app/com.google.android.gms-1/lib/arm:/data/app/com.google.android.gms-1/base.apk!/lib/armeabi-v7a for namespace 0xadfaf0d0 I/Vision (23634): Loading library libbarhopper.so W/linker (23634): /data/data/com.google.android.gms/app_vision/barcode/libs/armeabi-v7a/libbarhopper.so: unused DT entry: type 0x7ffffffd arg 0x76d I/Vision (23634): libbarhopper.so library load status: true I/DynamiteModule(23634): Considering local module com.google.android.gms.flags:2 and remote module com.google.android.gms.flags:3 I/DynamiteModule(23634): Selected remote version of com.google.android.gms.flags, version >= 3 F/libc (23634): Fatal signal 11 (SIGSEGV), code 1, fault addr 0x6a3de000 in tid 23666 (FirebaseMLHandl)


Build fingerprint: 'motorola/sanders_n/sanders_n:7.1.1/NPSS26.116-61-11/18:user/release-keys' Revision: 'p400' ABI: 'arm' pid: 23634, tid: 23666, name: FirebaseMLHandl >>> co.apperto.fastqrreaderviewexample <<< signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x6a3de000 r0 00000000 r1 00000000 r2 000000ff r3 5d92dd80 r4 00000208 r5 00000000 r6 00000000 r7 6a3de000 r8 00000000 r9 6a3de000 sl 00000c30 fp 00001040 ip 00000000 sp 851fd798 lr 6a3de000 pc 8ecc9d8c cpsr 600b0030 backtrace:

00 pc 00008d8c /data/data/com.google.android.gms/app_vision/barcode/libs/armeabi-v7a/libbarhopper.so

#01 pc 000043ad  /data/data/com.google.android.gms/app_vision/barcode/libs/armeabi-v7a/libbarhopper.so
#02 pc 00001e63  /data/data/com.google.android.gms/app_vision/barcode/libs/armeabi-v7a/libbarhopper.so
#03 pc 000bb5a7  /data/user_de/0/com.google.android.gms/app_chimera/m/0000004c/oat/arm/DynamiteModulesA.odex (offset 0x11e000)

Lost connection to device.

facundomedica commented 6 years ago

I'm having a hard time at figuring this out, so I hope you have patience 😅 .

It would be nice if you could try on another physical device. I think that if it doesn't work on that phone then it may be because of some configuration on the gradle of the project. (It would be really really weird that it doesn't work on any of your devices)

Another thing I would try is making a new flutter project and import this library as a dependency following the instructions in the readme and test it with this:

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:fast_qr_reader_view/fast_qr_reader_view.dart';

List<CameraDescription> cameras;

Future<Null> main() async {
  cameras = await availableCameras();
  runApp(new CameraApp());
}

class CameraApp extends StatefulWidget {
  @override
  _CameraAppState createState() => new _CameraAppState();
}

class _CameraAppState extends State<CameraApp> {
  QRReaderController controller;

  @override
  void initState() {
    super.initState();
    controller = new QRReaderController(cameras[0], ResolutionPreset.medium, [CodeFormat.qr], (dynamic value){
        print(value); // the result!
    // ... do something
    // wait 3 seconds then start scanning again.
    new Future.delayed(const Duration(seconds: 3), controller.startScanning);
    });
    controller.initialize().then((_) {
      if (!mounted) {
        return;
      }
      setState(() {});
      controller.startScanning();
    });
  }

  @override
  void dispose() {
    controller?.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    if (!controller.value.isInitialized) {
      return new Container();
    }
    return new AspectRatio(
        aspectRatio:
        controller.value.aspectRatio,
        child: new QRReaderPreview(controller));
  }
}

Last resort: Could you try this project: https://github.com/firebase/quickstart-android/tree/master/mlkit ? If that one doesn't work, then we know is a MLkit error and we can ask them for help, if it does, then it's something wrong with this project or Flutter.

Last last resort: use a different computer to run the project

ghunter99 commented 6 years ago

Thanks. There's not much you can do if you can't recreate the problem. I'll go through the steps you suggest.

dragosholban commented 6 years ago

Hello! Any news on this? I have the same problem, plugin works fine on iOS but crashes on Android device or keeps throwing exceptions on emulator:

I/flutter ( 4088): Another exception was thrown: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 3424 pos 12: '_debugLifecycleState != _ElementLifecycle.defunct': is not true.

facundomedica commented 6 years ago

@dragosholban Did you try what I said in my last comment? Also, can you provide:

dragosholban commented 6 years ago

@facundomedica I made a new Flutter project, installed the plugin as described in the docs, user the code you posted above and it still crashes :(

W/FastQrReaderViewPlugin(29824): onSuccess: asdfg
I/flutter (29824): asdfg
I/zygote64(29824): Do partial code cache collection, code=60KB, data=54KB
I/zygote64(29824): After code cache collection, code=60KB, data=54KB
I/zygote64(29824): Increasing code cache capacity to 256KB
I/CameraDevice-JV-0(29824): Camera now idle
F/libc    (29824): Fatal signal 11 (SIGSEGV), code 1, fault addr 0x7afd662000 in tid 29882 (FirebaseMLHandl), pid 29824 (entway.qrreader)
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'HUAWEI/CLT-L29/HWCLT:8.1.0/HUAWEICLT-L29/131(C432):user/release-keys'
Revision: '0'
ABI: 'arm64'
pid: 29824, tid: 29882, name: FirebaseMLHandl  >>> io.eventway.qrreader <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x7afd662000
    x0   0000007afd076b00  x1   0000000000000000  x2   0000000000000000  x3   00000000000000ff
    x4   0000000000000000  x5   0000000000000000  x6   0000000000000000  x7   0000007afd662000
    x8   0000007afd662000  x9   0000000000000000  x10  0000000000000000  x11  0000007afd662000
    x12  0000007afd076b00  x13  aaaaaaaaaaaaaaab  x14  00000000000000d2  x15  0000007afd003770
    x16  0000007bd5bd42d0  x17  0000007bd5b717c8  x18  0000000000000008  x19  00000000000001c8
    x20  0000000000000156  x21  0000000000000e40  x22  0000000000000ab0  x23  0000007afd076b00
    x24  0000007afd662000  x25  0000000000000000  x26  0000000000000ab0  x27  0000000000000004
    x28  0000007b1d376260  x29  0000007b1d376a48  x30  0000007b07e6dde8
    sp   0000007b1d376110  pc   0000007b07e6de18  pstate 0000000060000000
backtrace:
    #00 pc 000000000000ee18  /data/data/com.google.android.gms/app_vision/barcode/libs/arm64-v8a/libbarhopper.so
    #01 pc 000000000000762c  /data/data/com.google.android.gms/app_vision/barcode/libs/arm64-v8a/libbarhopper.so
    #02 pc 0000000000003624  /data/data/com.google.android.gms/app_vision/barcode/libs/arm64-v8a/libbarhopper.so
    #03 pc 0000000000000b08  /data/user_de/0/com.google.android.gms/app_chimera/m/00000009/oat/arm64/DynamiteModulesA.odex (offset 0x6000)
Lost connection to device.
dragosholban commented 6 years ago

I'm testing on a Huawei P20 Pro. I also tested the camera plugin you based your code on, but that works fine, with no issues. So I guess it's something in this project that goes wrong when the activity pauses and the camera stops...

facundomedica commented 6 years ago

Ok, I think I might have a clue, the problem seems to be here: https://github.com/facundomedica/fast_qr_reader_view/blob/master/android/src/main/java/co/apperto/fastqrreaderview/FastQrReaderViewPlugin.java#L95-L146

I'll compare it side to side with how it's done in MLKit, because I might have missed a method. I will take a look in a couple of hours but feel free to take a look for yourself and report any findings. Take special care with onPause and onResume. Hopefully we get this solved by today

dragosholban commented 6 years ago

@facundomedica did you find anything yet?

facundomedica commented 6 years ago

@dragosholban I haven't been able to replicate the issue on the devices I have available (BLU Vivo 8 and a Samsung Galaxy S4 mini) so I can switch between apps and it never crashes 🤦‍♂️ . I will try with different emulators until I get the error.

dragosholban commented 6 years ago

This is very strange, I tested on a Nexus 5X and it crashed too. I will test on a Samsung Galaxy S4 mini.

I also started to investigate, it seems the crash happens on dispose, I guess the firebase reader is still connected and tries to read the images when the camera shuts down. I haven't found the exact place, but it's somewhere around this.

dragosholban commented 6 years ago

Unfortunately I am not able to run on Samsung Galaxy S4 mini, I get the following error:

Installing build/app/outputs/apk/app.apk...
Package install error: Failure [INSTALL_FAILED_OLDER_SDK]
Error launching application on GT I9195.
facundomedica commented 6 years ago

Oh yes, I forgot that I had updated the OS with a non-factory one, sorry about that

dragosholban commented 6 years ago

Hi again! I created a new project just for testing this issue: https://github.com/dragosholban/flutter_qr_test

Maybe you can test it too, after you scan a QR Code, press back and the app will crash. I tried to find the problem, but I had no success. Please let me know if you can at least replicate the issue using this project. Thanks!

ghunter99 commented 6 years ago

Any luck recreating the problem? I'm sure you've got a day job and this stuff is pretty tricky. It does look like unloading / shutting down the camera is where the problem lies.

facundomedica commented 6 years ago

I got it to throw an exception with the project @dragosholban provided on a simulator, but it did not crash, it just threw this exception throw new QRReaderException( 'No scanning is happening', 'stopScanning was called when the scanner was not scanning.', );

I'll try to give this an entire day of debugging this week, if you find anything more please post it here, I'm having a hard time debugging this.

dragosholban commented 6 years ago

@facundomedica please use a real device to test, not the simulator. It does not crash on the simulator. Use a real device, scan some codes and press back.

facundomedica commented 6 years ago

@dragosholban this might sound a bit weird, but can you give me the QR codes you are testing with? I tested on a physical device and sadly it works...

Anyway, as a final resort, I will set up another repo or branch with some "blind tests" with stuff changed that I suppose can fix the issue and you can tell me if they fix it for you or not. If you help me with this I'll list your names in a "collaborators" or "acknowledgments" file or something like that.

dragosholban commented 6 years ago

@facundomedica this is crazy :( I scanned random codes generated here: https://www.the-qrcode-generator.com/

The this is that the app crashes even without scanning any codes. The crash happens when you "go back" to the previous screen, or when you try to switch to another app. It seems the camera stops but, somehow the MLKit is still processing images and crashes. I noticed that if I change the code to manually stop the scan, then, after a few seconds, I "go back" it does not crash anymore. It only happens when scanning is active.

ghunter99 commented 6 years ago

Hi @facundomedica & @dragosholban. I'm getting the same behaviour as @dragosholban. I'm testing on a Samsung S9 Android 8.0 & Motorola G5S Plus Android 7.1.1. The apps I'm building currently use Flutter Channel beta, v0.5.1. I made a Play Store internal release & all 5 users encountered the same problem. I'll try & do some more testing tomorrow.

facundomedica commented 6 years ago

Hello all! Can you try this in your pubspec.yaml?

  # fast_qr_reader_view: ^0.1.2
  fast_qr_reader_view:
    git:
      url: git://github.com/facundomedica/fast_qr_reader_view.git
      ref: blindtest

Also @ghunter99 you told me that you were distributing an app internally, do you have crashlytics set up?

I can't believe that my first cool open source project has a bug this difficult to catch 🤦‍♂️ ~Hopefully,~ We will find a solution to this!

ghunter99 commented 6 years ago

No I don't but I will set up crashlytics & get back to you

ghunter99 commented 6 years ago

Hi @facundomedica Here's a Crashlytics crash report. I am running Flutter beta 0.6.0. This crash happened when I tapped on the overview button to switch apps. I had not scanned anything. If I switch the code to the camera package it doesn't crash. Hope this is helpful:

Crashlytics - plaintext stacktrace downloaded by Gary Hunter at Mon, 03 Sep 2018 20:16:29 GMT

URL: https://fabric.io/xyris-software-australia-pty-ltd/android/apps/au.com.xyris.eddflutter/issues/5b8d96356007d59fcda29b9f?time=last-seven-days/sessions/5B8D95DA005600017B684EFAF46CBD33_DNE_0_v2

Organization: Xyris Software (Australia) Pty Ltd

Platform: android

Application: edd_flutter

Version: 5.0.999 (14)

Bundle Identifier: au.com.xyris.eddflutter

Issue #: 3

Issue ID: 5b8d96356007d59fcda29b9f

Session ID: 5B8D95DA005600017B684EFAF46CBD33_DNE_0_v2

Date: 2018-09-03T20:14:00Z

OS Version: 7.1.1

Device: Moto G (5S) Plus

RAM Free: 30.4%

Disk Free: 41.6%

0. Crashed: main

   at android.app.ActivityThread.deliverResults(ActivityThread.java:4130)
   at android.app.ActivityThread.handleSendResult(ActivityThread.java:4173)
   at android.app.ActivityThread.-wrap20(ActivityThread.java)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1546)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:154)
   at android.app.ActivityThread.main(ActivityThread.java:6165)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)

--

Fatal Exception: java.lang.RuntimeException: Failure delivering result ResultInfo{who=@android:requestPermissions:, request=513469796, result=-1, data=Intent { act=android.content.pm.action.REQUEST_PERMISSIONS (has extras) }} to activity {au.com.xyris.eddflutter/au.com.xyris.eddflutter.MainActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'void java.lang.Runnable.run()' on a null object reference at android.app.ActivityThread.deliverResults(ActivityThread.java:4130) at android.app.ActivityThread.handleSendResult(ActivityThread.java:4173) at android.app.ActivityThread.-wrap20(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1546) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6165) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)

Caused by java.lang.NullPointerException: Attempt to invoke interface method 'void java.lang.Runnable.run()' on a null object reference at io.flutter.plugins.camera.CameraPlugin$CameraRequestPermissionsListener.onRequestPermissionsResult(CameraPlugin.java:230) at io.flutter.app.FlutterPluginRegistry.onRequestPermissionsResult(FlutterPluginRegistry.java:191) at io.flutter.app.FlutterActivityDelegate.onRequestPermissionsResult(FlutterActivityDelegate.java:125) at io.flutter.app.FlutterActivity.onRequestPermissionsResult(FlutterActivity.java:133) at android.app.Activity.dispatchRequestPermissionsResult(Activity.java:7098) at android.app.Activity.dispatchActivityResult(Activity.java:6950) at android.app.ActivityThread.deliverResults(ActivityThread.java:4126) at android.app.ActivityThread.handleSendResult(ActivityThread.java:4173) at android.app.ActivityThread.-wrap20(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1546) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6165) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)

0. Crashed: main

   at android.app.ActivityThread.deliverResults(ActivityThread.java:4130)
   at android.app.ActivityThread.handleSendResult(ActivityThread.java:4173)
   at android.app.ActivityThread.-wrap20(ActivityThread.java)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1546)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:154)
   at android.app.ActivityThread.main(ActivityThread.java:6165)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)

1. OkHttp ConnectionPool

   at java.lang.Object.wait(Object.java)
   at com.android.okhttp.ConnectionPool.performCleanup(ConnectionPool.java:305)
   at com.android.okhttp.ConnectionPool.runCleanupUntilPoolIsEmpty(ConnectionPool.java:242)
   at com.android.okhttp.ConnectionPool.-wrap0(ConnectionPool.java)
   at com.android.okhttp.ConnectionPool$1.run(ConnectionPool.java:97)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
   at java.lang.Thread.run(Thread.java:761)

2. Measurement Worker

   at java.lang.Object.wait(Object.java)
   at java.lang.Object.wait(Object.java:407)
   at com.google.android.gms.internal.measurement.zzgm.run(Unknown Source)

3. Queue

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor$(Thread.java:2127)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:161)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2035)
   at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:519)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
   at java.lang.Thread.run(Thread.java:761)

4. pool-9-thread-1

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor$(Thread.java:2127)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:161)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2035)
   at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
   at java.lang.Thread.run(Thread.java:761)

5. Answers Events Handler1

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor$(Thread.java:2127)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:201)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2077)
   at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1103)
   at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1084)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
   at io.fabric.sdk.android.services.common.ExecutorUtils$1$1.onRun(ExecutorUtils.java:75)
   at io.fabric.sdk.android.services.common.BackgroundPriorityRunnable.run(BackgroundPriorityRunnable.java:30)
   at java.lang.Thread.run(Thread.java:761)

6. Queue

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor$(Thread.java:2127)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:161)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2035)
   at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:519)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
   at java.lang.Thread.run(Thread.java:761)

7. FirebaseMLHandler

   at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
   at android.os.MessageQueue.next(MessageQueue.java:323)
   at android.os.Looper.loop(Looper.java:136)
   at android.os.HandlerThread.run(HandlerThread.java:61)

8. Queue

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor$(Thread.java:2127)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:161)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2035)
   at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:519)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
   at java.lang.Thread.run(Thread.java:761)

9. Queue

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor$(Thread.java:2127)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:161)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2035)
   at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:519)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
   at java.lang.Thread.run(Thread.java:761)

10. Queue

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor$(Thread.java:2127)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:161)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2035)
   at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:519)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
   at java.lang.Thread.run(Thread.java:761)

11. Queue

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor$(Thread.java:2127)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:161)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2035)
   at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:519)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
   at java.lang.Thread.run(Thread.java:761)

12. pool-4-thread-1

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor$(Thread.java:2127)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:161)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2035)
   at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1091)
   at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1084)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
   at java.lang.Thread.run(Thread.java:761)

13. pool-3-thread-1

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor$(Thread.java:2127)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:161)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2035)
   at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
   at java.lang.Thread.run(Thread.java:761)

14. GoogleApiHandler

   at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
   at android.os.MessageQueue.next(MessageQueue.java:323)
   at android.os.Looper.loop(Looper.java:136)
   at android.os.HandlerThread.run(HandlerThread.java:61)

15. Crashlytics Exception Handler1

   at dalvik.system.VMStack.getThreadStackTrace(VMStack.java)
   at java.lang.Thread.getStackTrace(Thread.java:1566)
   at java.lang.Thread.getAllStackTraces(Thread.java:1616)
   at com.crashlytics.android.core.CrashlyticsController.writeSessionEvent(CrashlyticsController.java:1334)
   at com.crashlytics.android.core.CrashlyticsController.writeFatal(CrashlyticsController.java:1021)
   at com.crashlytics.android.core.CrashlyticsController.access$500(CrashlyticsController.java:68)
   at com.crashlytics.android.core.CrashlyticsController$7.call(CrashlyticsController.java:327)
   at com.crashlytics.android.core.CrashlyticsController$7.call(CrashlyticsController.java:320)
   at java.util.concurrent.FutureTask.run(FutureTask.java:237)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
   at io.fabric.sdk.android.services.common.ExecutorUtils$1$1.onRun(ExecutorUtils.java:75)
   at io.fabric.sdk.android.services.common.BackgroundPriorityRunnable.run(BackgroundPriorityRunnable.java:30)
   at java.lang.Thread.run(Thread.java:761)

16. HeapTaskDaemon

   at dalvik.system.VMRuntime.runHeapTasks(VMRuntime.java)
   at java.lang.Daemons$HeapTaskDaemon.run(Daemons.java:433)
   at java.lang.Thread.run(Thread.java:761)

17. FinalizerDaemon

   at java.lang.Object.wait(Object.java)
   at java.lang.Object.wait(Object.java:407)
   at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:188)
   at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:209)
   at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:204)
   at java.lang.Thread.run(Thread.java:761)

18. GoogleApiHandler

   at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
   at android.os.MessageQueue.next(MessageQueue.java:323)
   at android.os.Looper.loop(Looper.java:136)
   at android.os.HandlerThread.run(HandlerThread.java:61)

19. ReferenceQueueDaemon

   at java.lang.Object.wait(Object.java)
   at java.lang.Daemons$ReferenceQueueDaemon.run(Daemons.java:150)
   at java.lang.Thread.run(Thread.java:761)

20. ImageDecoderThread

   at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
   at android.os.MessageQueue.next(MessageQueue.java:323)
   at android.os.Looper.loop(Looper.java:136)
   at android.os.HandlerThread.run(HandlerThread.java:61)

21. Queue

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor$(Thread.java:2127)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:161)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2035)
   at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:519)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
   at java.lang.Thread.run(Thread.java:761)

22. Queue

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor$(Thread.java:2127)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:161)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2035)
   at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:519)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
   at java.lang.Thread.run(Thread.java:761)

23. FinalizerWatchdogDaemon

   at java.lang.Object.wait(Object.java)
   at java.lang.Daemons$FinalizerWatchdogDaemon.sleepUntilNeeded(Daemons.java:269)
   at java.lang.Daemons$FinalizerWatchdogDaemon.run(Daemons.java:249)
   at java.lang.Thread.run(Thread.java:761)

24. pool-7-thread-1

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor$(Thread.java:2127)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:161)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2035)
   at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1091)
   at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1084)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
   at java.lang.Thread.run(Thread.java:761)

25. Queue

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor$(Thread.java:2127)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:161)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2035)
   at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:519)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
   at java.lang.Thread.run(Thread.java:761)
facundomedica commented 6 years ago

I have been able to recreate the issue in a coworker's device. Also, here is a related issue: https://stackoverflow.com/questions/51425658/sigsegv-crash-with-firebase-mlkit-barcode-scanner

facundomedica commented 6 years ago

Okay, big update here! The problem seems to be with devices that input more images than it can process, so when you go to background it keeps processing lots of data. I'm trying to solve this with a throttle flag so it process "just enough" but it seems to slow down everything (https://github.com/firebase/quickstart-android/blob/master/mlkit/app/src/main/java/com/google/firebase/samples/apps/mlkit/VisionProcessorBase.java). If this doesn't solve it, I might have to rewrite the Android class completely.

ghunter99 commented 6 years ago

Great work!

dragosholban commented 6 years ago

Hi @facundomedica I made the changes you suggested and it seems to work fine. I made a PR, if it helps.

facundomedica commented 6 years ago

@dragosholban thank you so much! I was going to tackle this next week so I'm glad that you did earlier! I'm merging this right now #4. Please @ghunter99 let me know if this works for you so I can close this issue (use it from the git until I update the Dart package).

  fast_qr_reader_view:
    git:
      url: git://github.com/facundomedica/fast_qr_reader_view.git
ghunter99 commented 6 years ago

Hi @facundomedica

Unfortunately I still get an error. I've attached the Crashlytics log. Running in release mode on a Moto G 5S Plus the scanning screen is displayed for about a second then freezes. This is the output in terminal:

E/FlutterNativeView(17608): Uncaught exception in binary message listener E/FlutterNativeView(17608): java.lang.IllegalStateException: Reply already submitted E/FlutterNativeView(17608): at io.flutter.view.FlutterNativeView$1.reply(FlutterNativeView.java:174) E/FlutterNativeView(17608): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:209) E/FlutterNativeView(17608): at io.flutter.view.FlutterNativeView.handlePlatformMessage(FlutterNativeView.java:163) E/FlutterNativeView(17608): at android.os.MessageQueue.nativePollOnce(Native Method) E/FlutterNativeView(17608): at android.os.MessageQueue.next(MessageQueue.java:323) E/FlutterNativeView(17608): at android.os.Looper.loop(Looper.java:136) E/FlutterNativeView(17608): at android.app.ActivityThread.main(ActivityThread.java:6165) E/FlutterNativeView(17608): at java.lang.reflect.Method.invoke(Native Method) E/FlutterNativeView(17608): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888) E/FlutterNativeView(17608): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)

au.com.xyris.eddflutter_issue_13_crash_5B9C0549030A00013D2739D6D52F0571_DNE_0_v2.txt

dragosholban commented 6 years ago

Could you try the Eventway app from the play store? You'll have to register an account on the website, but it's the app I developed using this plugin... I'm curious if it still crashes. Thanks!

On Fri, Sep 14, 2018, 10:17 PM ghunter99 notifications@github.com wrote:

Hi @facundomedica https://github.com/facundomedica

Unfortunately I still get an error. I've attached the Crashlytics log. Running in release mode on a Moto G 5S Plus the scanning screen is displayed for about a second then freezes. This is the output in terminal:

E/FlutterNativeView(17608): Uncaught exception in binary message listener E/FlutterNativeView(17608): java.lang.IllegalStateException: Reply already submitted E/FlutterNativeView(17608): at io.flutter.view.FlutterNativeView$1.reply(FlutterNativeView.java:174) E/FlutterNativeView(17608): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:209) E/FlutterNativeView(17608): at io.flutter.view.FlutterNativeView.handlePlatformMessage(FlutterNativeView.java:163) E/FlutterNativeView(17608): at android.os.MessageQueue.nativePollOnce(Native Method) E/FlutterNativeView(17608): at android.os.MessageQueue.next(MessageQueue.java:323) E/FlutterNativeView(17608): at android.os.Looper.loop(Looper.java:136) E/FlutterNativeView(17608): at android.app.ActivityThread.main(ActivityThread.java:6165) E/FlutterNativeView(17608): at java.lang.reflect.Method.invoke(Native Method) E/FlutterNativeView(17608): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888) E/FlutterNativeView(17608): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)

au.com.xyris.eddflutter_issue_13_crash_5B9C0549030A00013D2739D6D52F0571_DNE_0_v2.txt https://github.com/facundomedica/fast_qr_reader_view/files/2384604/au.com.xyris.eddflutter_issue_13_crash_5B9C0549030A00013D2739D6D52F0571_DNE_0_v2.txt

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/facundomedica/fast_qr_reader_view/issues/3#issuecomment-421458250, or mute the thread https://github.com/notifications/unsubscribe-auth/ABS4kPTSUvwyXW3Nfq-uStuDdP4ro62Cks5ubAC1gaJpZM4Vfm7s .

facundomedica commented 6 years ago

@ghunter99 So in dev mode you don't get the error? Also, do you get the same error with the example app? @dragosholban I've just downloaded it. You can't imagine how cool it is to see this library in someone else's app!

ghunter99 commented 6 years ago

@facundomedica I just tried signing up on eventway.io & got a server error :( Server error! Something's broken. Our developers were already alerted by this event, we're on it! Click here to return to homepage

ghunter99 commented 6 years ago

I'll test in dev mode now

facundomedica commented 6 years ago

Probably related to your issue @ghunter99 https://github.com/flutter/flutter/issues/18348

ghunter99 commented 6 years ago

@facundomedica, I ran the example program (using git://github.com/facundomedica/fast_qr_reader_view.git) on the Motorola phone & screen froze with this output in the console: (hope it's helpful)

Waiting for another flutter command to release the startup lock... Launching lib/main.dart on Moto G 5S Plus in debug mode... Initializing gradle... Resolving dependencies... Running 'gradlew assembleDebug'... registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection) registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection) registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection) registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection) registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection) Built build/app/outputs/apk/debug/app-debug.apk. Installing build/app/outputs/apk/app.apk... W/DynamiteModule(23456): Local module descriptor class for com.google.android.gms.vision.dynamite.barcode not found. I/DynamiteModule(23456): Considering local module com.google.android.gms.vision.dynamite.barcode:0 and remote module com.google.android.gms.vision.dynamite.barcode:0 D/BarcodeNativeHandle(23456): Cannot load feature, fall back to load whole module. W/DynamiteModule(23456): Local module descriptor class for com.google.android.gms.vision.dynamite not found. I/DynamiteModule(23456): Considering local module com.google.android.gms.vision.dynamite:0 and remote module com.google.android.gms.vision.dynamite:1800 I/DynamiteModule(23456): Selected remote version of com.google.android.gms.vision.dynamite, version >= 1800 W/System (23456): ClassLoader referenced unknown path: D/ApplicationLoaders(23456): ignored Vulkan layer search path /data/app/com.google.android.gms-2/lib/arm:/data/app/com.google.android.gms-2/base.apk!/lib/armeabi-v7a for namespace 0xa9f10090 W/System (23456): ClassLoader referenced unknown path: /data/user_de/0/com.google.android.gms/app_chimera/m/00000056/n/armeabi-v7a W/System (23456): ClassLoader referenced unknown path: /data/user_de/0/com.google.android.gms/app_chimera/m/00000056/n/armeabi D/ApplicationLoaders(23456): ignored Vulkan layer search path /data/app/com.google.android.gms-2/lib/arm:/data/app/com.google.android.gms-2/base.apk!/lib/armeabi-v7a for namespace 0xa9f100d0 I/Vision (23456): Loading library libbarhopper.so W/linker (23456): /data/data/com.google.android.gms/app_vision/barcode/libs/armeabi-v7a/libbarhopper.so: unused DT entry: type 0x7ffffffd arg 0x76d I/Vision (23456): libbarhopper.so library load status: true I/DynamiteModule(23456): Considering local module com.google.android.gms.flags:2 and remote module com.google.android.gms.flags:3 I/DynamiteModule(23456): Selected remote version of com.google.android.gms.flags, version >= 3 W/System (23456): ClassLoader referenced unknown path: /data/user_de/0/com.google.android.gms/app_chimera/m/00000057/n/armeabi-v7a W/System (23456): ClassLoader referenced unknown path: /data/user_de/0/com.google.android.gms/app_chimera/m/00000057/n/armeabi Syncing files to device Moto G 5S Plus...

facundomedica commented 6 years ago

@ghunter99 try with fast_qr_reader_view: ^0.1.3, that's the latest and it's on the Dart package index

ghunter99 commented 6 years ago

@facundomedica looks like a similar error:

Running "flutter packages get" in example... Launching lib/main.dart on Moto G 5S Plus in debug mode... Initializing gradle... Resolving dependencies... Running 'gradlew assembleDebug'... registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection) registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection) registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection) registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection) registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection) Built build/app/outputs/apk/debug/app-debug.apk. Installing build/app/outputs/apk/app.apk... Syncing files to device Moto G 5S Plus... I/CameraManagerGlobal(27439): Connecting to camera service D/CameraManager(27439): Cam id 2 not whitelisted for app, skipping W/DynamiteModule(27439): Local module descriptor class for com.google.android.gms.vision.dynamite.barcode not found. I/DynamiteModule(27439): Considering local module com.google.android.gms.vision.dynamite.barcode:0 and remote module com.google.android.gms.vision.dynamite.barcode:0 D/BarcodeNativeHandle(27439): Cannot load feature, fall back to load whole module. W/DynamiteModule(27439): Local module descriptor class for com.google.android.gms.vision.dynamite not found. I/DynamiteModule(27439): Considering local module com.google.android.gms.vision.dynamite:0 and remote module com.google.android.gms.vision.dynamite:1800 I/DynamiteModule(27439): Selected remote version of com.google.android.gms.vision.dynamite, version >= 1800 W/System (27439): ClassLoader referenced unknown path: D/ApplicationLoaders(27439): ignored Vulkan layer search path /data/app/com.google.android.gms-2/lib/arm:/data/app/com.google.android.gms-2/base.apk!/lib/armeabi-v7a for namespace 0xa9f10090 W/System (27439): ClassLoader referenced unknown path: /data/user_de/0/com.google.android.gms/app_chimera/m/00000056/n/armeabi-v7a W/System (27439): ClassLoader referenced unknown path: /data/user_de/0/com.google.android.gms/app_chimera/m/00000056/n/armeabi D/ApplicationLoaders(27439): ignored Vulkan layer search path /data/app/com.google.android.gms-2/lib/arm:/data/app/com.google.android.gms-2/base.apk!/lib/armeabi-v7a for namespace 0xa9f100d0 I/Vision (27439): Loading library libbarhopper.so W/linker (27439): /data/data/com.google.android.gms/app_vision/barcode/libs/armeabi-v7a/libbarhopper.so: unused DT entry: type 0x7ffffffd arg 0x76d I/Vision (27439): libbarhopper.so library load status: true I/DynamiteModule(27439): Considering local module com.google.android.gms.flags:2 and remote module com.google.android.gms.flags:3 I/DynamiteModule(27439): Selected remote version of com.google.android.gms.flags, version >= 3 W/System (27439): ClassLoader referenced unknown path: /data/user_de/0/com.google.android.gms/app_chimera/m/00000057/n/armeabi-v7a W/System (27439): ClassLoader referenced unknown path: /data/user_de/0/com.google.android.gms/app_chimera/m/00000057/n/armeabi

ghunter99 commented 6 years ago

@facundomedica I signed into the Eventway app & the screen froze when I bought up the scanning screen. Maybe you'll get a Crashlytics dump?

sestegra commented 6 years ago

With your last update, the preview refresh rate is very low (2 or 3 images per seconds) on my mobile phone Moto C Plus.

Moreover, no barcode are found by the app.

facundomedica commented 6 years ago

@ghunter99 the Eventway app is @dragosholban's, not mine. Also, it didn't crash, only froze right?

@sestegra thanks for joining the conversation!

I would guess that the throttle should throttle the image decoding and not the imagereader, so the surface will still get updates and the decoder only when it's not throttling. I'll try to upload something this week but feel free to experiment and make a pull request!

facundomedica commented 6 years ago

Sorry, a commit closed this automatically!

facundomedica commented 6 years ago

I've just pushed an update in which almost everything was rewritten in Android. The code is a bit messy but it should be easy to clean it up once we know it is working. From my tests I've seen a serious improvement in performance and speed to read codes. Try it out with this:

fast_qr_reader_view:
    git:
      url: git://github.com/facundomedica/fast_qr_reader_view.git
ghunter99 commented 6 years ago

@facundomedica Wow!! A huge improvement. Much faster & much more stable. It still sometimes crashes though. I've attached a Crashlytics crash report.

au.com.xyris.eddflutter_issue_17_crash_5BA09E9403BE00012EE2DAB4D0E2A368_DNE_0_v2.txt

sestegra commented 6 years ago

@facundomedica It works well on my phone now.

facundomedica commented 6 years ago

@ghunter99 there was a duplicated start, re-download the package and try again

ghunter99 commented 6 years ago

Hi @facundomedica. I still seem to get crashes. They seem to occur when I return to the app. When I use my app in testing I open & close the scanner frequently within the app. I ran the example app with the new package & wasn't able to get it to crash.

Attached is a crash report which I hope is helpful.

au.com.xyris.eddflutter_issue_17_crash_5BA15BB90257000161FDA6D86CFFC3CC_DNE_0_v2.txt

facundomedica commented 6 years ago

@ghunter99 It fails in a line where preview isn't checked for null, I just pushed a change, let me know if that fixes it for you!

ghunter99 commented 6 years ago

Thanks @facundomedica. So far so good... I'll get QA to test today. It's 8am here in Brisbane, Australia

ghunter99 commented 6 years ago

@facundomedica, I did a lot of testing today & found 2 things.

Hope this is helpful and easy to reproduce.

First thing is, if you just add the fast_qr_reader_view package to an app (for example, the default app created when you make a new project) then run the app & just hit the Android back button (at the bottom left) then the app crashes with the following debug output below (looks like package needs to be initialized even if you don't use it)

I attached the code main.dart file that I was using to create this behaviour. You can just replace main.dart in your example to see the problem.

D/AndroidRuntime(18205): Shutting down VM E/AndroidRuntime(18205): FATAL EXCEPTION: main E/AndroidRuntime(18205): Process: co.apperto.fastqrreaderviewexample, PID: 18205 E/AndroidRuntime(18205): java.lang.RuntimeException: Unable to destroy activity {co.apperto.fastqrreaderviewexample/co.apperto.fastqrreaderviewexample.MainActivity}: java.lang.NullPointerException: Attempt to read from field 'co.apperto.fastqrreaderview.common.CameraSource co.apperto.fastqrreaderview.FastQrReaderViewPlugin$QrReader.cameraSource' on a null object reference E/AndroidRuntime(18205): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4244) E/AndroidRuntime(18205): at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4262) E/AndroidRuntime(18205): at android.app.ActivityThread.-wrap6(ActivityThread.java) E/AndroidRuntime(18205): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1551) E/AndroidRuntime(18205): at android.os.Handler.dispatchMessage(Handler.java:102) E/AndroidRuntime(18205): at android.os.Looper.loop(Looper.java:154) E/AndroidRuntime(18205): at android.app.ActivityThread.main(ActivityThread.java:6165) E/AndroidRuntime(18205): at java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime(18205): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888) E/AndroidRuntime(18205): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778) E/AndroidRuntime(18205): Caused by: java.lang.NullPointerException: Attempt to read from field 'co.apperto.fastqrreaderview.common.CameraSource co.apperto.fastqrreaderview.FastQrReaderViewPlugin$QrReader.cameraSource' on a null object reference E/AndroidRuntime(18205): at co.apperto.fastqrreaderview.FastQrReaderViewPlugin$QrReader.access$600(FastQrReaderViewPlugin.java:339) E/AndroidRuntime(18205): at co.apperto.fastqrreaderview.FastQrReaderViewPlugin$2.onActivityDestroyed(FastQrReaderViewPlugin.java:147) E/AndroidRuntime(18205): at android.app.Application.dispatchActivityDestroyed(Application.java:253) E/AndroidRuntime(18205): at android.app.Activity.onDestroy(Activity.java:1850) E/AndroidRuntime(18205): at io.flutter.app.FlutterActivity.onDestroy(FlutterActivity.java:103) E/AndroidRuntime(18205): at android.app.Activity.performDestroy(Activity.java:6889) E/AndroidRuntime(18205): at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1175) E/AndroidRuntime(18205): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4231)

main.dart.zip