java - 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();
}
}
解决方案
这是因为您正在完成 MainActivity 而正在使用MainActivity.this
的操作仍在进行中。
确保在完成之前不会调用 Button on clickInitializeSQLCipher
或 onClick 只是通过引入一些布尔变量来等待操作完成,或者您可以结合使用 Object.wait 和 Object.notify
推荐阅读
- r - R中的字符串匹配 - 模式问题
- c - 动态开放寻址二次探测散列表的散列函数
- laravel - laravel 错误 - 试图获取非对象的属性
- java - 非属性(内联)文本值的 OpenAPI 注释
- javascript - 如何根据 html 选择选项填充 html 文本输入字段
- ruby-on-rails - 如何将 id 添加到 Friendly_id slug?
- python - 在 Django 中的表单中设置初始值
- javascript - 使用 Google Apps 脚本,我们可以在有人将数据输入 Google 电子表格后立即在 HTML 页面中显示该数据吗?
- firebase - Flutter 中的“未找到匹配的客户端”
- java - java.lang.NoClassDefFoundError: javax/net/ssl/HostnameVerifier