首页 > 解决方案 > android中的线程(在开始活动时)

问题描述

这段代码运行良好,没有崩溃,但是当我开始一个新的活动时,在 logcat 中没有详细信息的 MainAvtivity 崩溃只是打印(应用程序终止):

Thread t2 = new Thread() {
        @Override
        public void run() {
            try {
                sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                InitializeSQLCipher();
            }
        }
    };
    t2.start();

    Button btn = (Button) findViewById(R.id.btn);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(MainActivity.this, Info_Activity.class));
            finish();
        }
    });

和 InitializeSQLCipher 方法:

private void InitializeSQLCipher() {

    SQLiteDatabase.loadLibs(MainActivity.this);

    try {
        desPath = Environment.getExternalStorageDirectory() + "/Android/data/ir.plant.vision2";
        file = new File(desPath);
        if (!file.exists()) {
            file.mkdirs();
            file.createNewFile();
            copyDB(MainActivity.this.getAssets().open("data"), new FileOutputStream(desPath + "/data"));
        }
    } catch (FileNotFoundException f) {
        f.printStackTrace();
    } catch (IOException io) {
        io.printStackTrace();
    }

}

标签: javaandroidmultithreading

解决方案


这是因为您正在完成 MainActivity 而正在使用MainActivity.this的操作仍在进行中。

确保在完成之前不会调用 Button on clickInitializeSQLCipher或 onClick 只是通过引入一些布尔变量来等待操作完成,或者您可以结合使用 Object.wait 和 Object.notify


推荐阅读