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




