繁体   English   中英

Android Activity完成方法杀死应用程序

[英]Android Activity finish method kills application

我正在尝试构建一个使用条形码阅读器的android应用程序。

该应用程序的工作流程如下:

  1. 该应用程序以显示的“ MainActivity”开头
  2. 用户单击MainActivity中的按钮,然后启动第二个活动以进行条形码扫描
  3. 用户扫描条形码,结果显示在MainActivity的文本字段中

主要活动使用“ startActivityForResult”启动条形码扫描活动,并监听结果事件。

条形码扫描活动监听条形码扫描库的扫描事件,并使用“ setResult”方法设置结果。

条形码扫描活动将自行关闭,并让主活动读取该值。

以上所有功能均按预期工作,但在onActivityResult事件处理后,应用程序终止。

在日志文件中,我只能找到通用的应用程序终止消息

您可以在下面找到代码段并注销。

Main Activity.java-单击按钮,然后单击onActivityResult:

b.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent i = new Intent(Intent.ACTION_VIEW);
        i.setClass(getBaseContext(), BarcodeScannerActivity.class);

        startActivityForResult(i, 100);
    }
});

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.i("BARCODE_RESULT", data.getStringExtra("displayValue"));
    super.onActivityResult(requestCode, resultCode, data);

    TextView t = (TextView) findViewById(R.id.textView);
    t.setText(data.getStringExtra("displayValue"));

    Log.i("BARCODE_RESULT", data.getStringExtra("displayValue"));
}

条码活动-OnBarcodeScan

public void onScanned(final Barcode barcode) {
    Log.i("BARCODE", "Barcode scanned: " + barcode.displayValue);

    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(getBaseContext(), "Barcode: " + barcode.displayValue, Toast.LENGTH_LONG).show();

            Intent intent=new Intent();
            intent.putExtra("displayValue",barcode.displayValue);
            setResult(Activity.RESULT_OK, intent);

            finish();
        }
    });
}

最后但并非最不重要的一点是:

/** I/BARCODE: Barcode scanned: 8005200010448
/** I/BARCODE_RESULT: 8005200010448
/** I/BARCODE_RESULT: 8005200010448
/** I/Process: Sending signal. PID: 10012 SIG: 9

*编辑*我刚刚在设备日志中找到以下异常,该异常已在SIG之前抛出:9日志

W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'int com.huawei.lcagent.client.LogCollectManager.getUserType()' on a null object reference
W/System.err:     at com.android.server.util.ReportTools.getUserType(ReportTools.java:86)
W/System.err:     at com.android.server.util.ReportTools.isBetaUser(ReportTools.java:73)
W/System.err:     at com.android.server.util.ReportTools.report(ReportTools.java:58)
W/System.err:     at com.android.server.util.HwUserBehaviourRecord.appExitRecordInnerImpl(HwUserBehaviourRecord.java:125)
W/System.err:     at com.android.server.util.HwUserBehaviourRecord.access$200(HwUserBehaviourRecord.java:32)
W/System.err:     at com.android.server.util.HwUserBehaviourRecord$AsyUploadLooperThread$1.handleMessage(HwUserBehaviourRecord.java:255)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err:     at android.os.Looper.loop(Looper.java:150)
W/System.err:     at com.android.server.util.HwUserBehaviourRecord$AsyUploadLooperThread.run(HwUserBehaviourRecord.java:267)

预先感谢您的支持

马蒂亚

尝试通过finish()方法删除runOnUiThread() 如果这是runOnUiThread()中的所有代码,我认为不需要onScan()

public void onScanned(final Barcode barcode) {
    Log.i("BARCODE", "Barcode scanned: " + barcode.displayValue)
            Toast.makeText(getBaseContext(), "Barcode: " + barcode.displayValue, Toast.LENGTH_LONG).show();

            Intent intent=new Intent();
            intent.putExtra("displayValue",barcode.displayValue);
            setResult(Activity.RESULT_OK, intent);

            finish();
}

另外,在您的设备上检查是否在设置中授予了所有权限。

尝试使用YourActivity.this.finish而不是finish。

Your_Activity.this.finish();

我希望这行得通!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM