From b16842bb8a22ae34ab0037abac6acf99f29b99c0 Mon Sep 17 00:00:00 2001 From: Bin Li Date: Mon, 27 Aug 2018 09:56:01 +0800 Subject: [PATCH] Fix abnormal exit after create engine failed --- .../java/com/xiaomi/mace/demo/AppModel.java | 20 +++++++++++++++--- .../com/xiaomi/mace/demo/CameraActivity.java | 21 ++++++++++++++----- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/mace/examples/android/app/src/main/java/com/xiaomi/mace/demo/AppModel.java b/mace/examples/android/app/src/main/java/com/xiaomi/mace/demo/AppModel.java index d7447afb..edd7bf18 100644 --- a/mace/examples/android/app/src/main/java/com/xiaomi/mace/demo/AppModel.java +++ b/mace/examples/android/app/src/main/java/com/xiaomi/mace/demo/AppModel.java @@ -28,6 +28,7 @@ import org.greenrobot.eventbus.EventBus; public class AppModel { + private boolean stopClassify = false; private Handler mJniThread; public static AppModel instance = new AppModel(); private AppModel() { @@ -54,8 +55,18 @@ public class AppModel { @Override public void run() { int result = JniMaceUtils.maceMobilenetCreateEngine(initData.getModel(), initData.getDevice()); - if (result == -1 && callback != null) { - callback.onCreateEngineFail(); + Log.i("APPModel", "maceMobilenetCreateEngine result = " + result); + + if (result == -1) { + stopClassify = true; + MaceApp.app.mMainHandler.post(new Runnable() { + @Override + public void run() { + callback.onCreateEngineFail(InitData.DEVICES[0].equals(initData.getDevice())); + } + }); + } else { + stopClassify = false; } } }); @@ -65,6 +76,9 @@ public class AppModel { mJniThread.post(new Runnable() { @Override public void run() { + if (stopClassify) { + return; + } long start = System.currentTimeMillis(); float[] result = JniMaceUtils.maceMobilenetClassify(input); @@ -76,7 +90,7 @@ public class AppModel { } public interface CreateEngineCallback { - void onCreateEngineFail(); + void onCreateEngineFail(final boolean quit); } } diff --git a/mace/examples/android/app/src/main/java/com/xiaomi/mace/demo/CameraActivity.java b/mace/examples/android/app/src/main/java/com/xiaomi/mace/demo/CameraActivity.java index 7d7ccc89..ab62a90f 100644 --- a/mace/examples/android/app/src/main/java/com/xiaomi/mace/demo/CameraActivity.java +++ b/mace/examples/android/app/src/main/java/com/xiaomi/mace/demo/CameraActivity.java @@ -25,7 +25,6 @@ import android.view.WindowManager; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; -import android.widget.Toast; import com.xiaomi.mace.demo.camera.CameraEngage; @@ -187,17 +186,29 @@ public class CameraActivity extends Activity implements View.OnClickListener, Ap } @Override - public void onCreateEngineFail() { + public void onCreateEngineFail(final boolean quit) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Error"); - builder.setMessage("Failed to create inference engine with current setting!"); + builder.setMessage("Failed to create inference engine with current setting:\n" + initData.getModel() + ", " + initData.getDevice()); builder.setCancelable(false); - builder.setPositiveButton("Quit", new DialogInterface.OnClickListener() { + builder.setPositiveButton(quit ? "Quit" : "Reset", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - finish(); + if (quit) { + System.exit(0); + } else { + dialog.dismiss(); + resetCpu(); + } } }); builder.show(); } + + private void resetCpu() { + String content = InitData.DEVICES[0]; + mSelectPhoneType.setText(content); + initData.setDevice(content); + AppModel.instance.maceMobilenetCreateEngine(initData, CameraActivity.this); + } } -- GitLab