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

时间:2017-08-31 12:54:14

标签: java android android-activity

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

应用工作流程如下:

  1. 应用程序以“MainActivity”显示
  2. 开始
  3. 用户点击MainActivity中的按钮并开始第二项条形码扫描活动
  4. 用户扫描条形码,结果显示在MainActivity
  5. 的文本字段中

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

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

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

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

    在日志文件中,我只能找到一个通用的app-kill消息

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

    主要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();
            }
        });
    }
    

    最后但并非最不重要的是,logcat out:

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

    *编辑* 我刚刚在设备的日志中找到了以下异常,它在SIG:9 log

    之前被抛出
    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)
    

    提前感谢您的支持

    马蒂亚

2 个答案:

答案 0 :(得分:0)

尝试删除runOnUiThread()方法上的finish()。如果这是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();
}

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

答案 1 :(得分:-1)

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

Your_Activity.this.finish();

我希望这有效!