为何Android中mod.coba()的Log输出晚于Log.i("coba",a)?
问题解答
嘿,这个情况其实是Android日志系统的一个常见小坑,你的代码执行顺序完全没问题,日志显示顺序颠倒只是Logcat的输出机制导致的视觉偏差而已。
具体原因可以从这几个角度理解:
Log输出是异步的:Android的
Log方法并不是调用后立刻把日志打印出来,而是把消息扔进系统缓冲区,由后台线程负责写入日志系统。如果两条日志的调用时间差极小,后台线程处理它们的顺序可能和代码里的调用顺序不一致,就会出现显示顺序反过来的情况。Logcat的排序逻辑:Logcat默认是按日志实际被写入系统的时间排序,而不是你代码里的调用时间。
mod.coba()里的日志可能因为极微小的系统调度延迟,比后面的Log.i("coba",a)稍晚被写入,所以就排在了后面。你可以试试在Logcat里切换到严格的"按时间戳排序"模式,或者在mod.coba()之后加个Thread.sleep(100)(仅测试用,别留到生产代码里),就能看到正确的顺序了。验证代码执行顺序:如果你想确认代码确实是先执行
mod.coba(),可以在两个Log之间加个同步输出,比如:mod.coba(); System.out.println("已经执行完mod.coba()了"); String a = "5"; Log.i("coba",a);这时候控制台的输出顺序肯定是先
sdsds sdsds,然后是已经执行完mod.coba()了,最后是coba 5——这就证明代码的执行顺序完全符合你的预期,只是Logcat的显示出了点小问题。
相关代码
Model类的方法
public void coba(){ Log.i("sdsds","sdsds") }
Activity代码
public class ViewInformasiSiswa extends AppCompatActivity { Model mod; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mod = new Model(); mod.coba(); String a = "5"; Log.i("coba",a); } }
实际日志输出
coba 5 sdsds sdsds
内容的提问来源于stack exchange,提问作者Chandra Febryan Putra
相关产品推荐
相关产品推荐

