You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android Studio调试数据库时新线程无法打印日志,原因何在?

为什么新线程里的System.out.println没有输出到Android Studio控制台?

兄弟,我一眼就揪出问题啦——你只创建了Thread对象,但根本没启动这个线程

你写的new Thread(...)仅仅是实例化了一个线程对象,但线程不会自动开始执行,必须调用它的start()方法,才会触发run()方法里的代码逻辑。这就是为什么外面的打印语句能正常输出,而线程内部的那句完全没机会执行到。

给你修正后的代码,关键就是加了start()

System.out.println("About to start new thread"); // 该语句能输出到控制台
new Thread(new Runnable() {
    public void run() {
        ContactsDatabase db = ContactsDatabase.getContactsDatabase(getApplicationContext());
        db.contactDao().insertAll(contact);
        db.close();
        System.out.println("Inside new thread"); // 现在应该能正常输出啦
    }
}).start(); // 启动线程的核心调用!

另外给你两个Android开发的小建议:

  • 尽量用Log.d()(调试日志)替代System.out.println,Android Studio的Logcat对Log类的输出支持更完善,还能按标签过滤日志,比控制台打印实用得多。比如写成:
Log.d("ThreadDebug", "Inside new thread");
  • 如果是做数据库操作,现在更推荐用Room配合协程(Coroutines)来实现异步操作,比手动管理线程更简洁、安全,也更符合Android的现代开发规范。

内容的提问来源于stack exchange,提问作者strudel

火山引擎 最新活动