log.d 的输出顺序?
Order of output for log.d?
我将 android 应用程序连接到 google 的实时数据库。 (这是为学校准备的,我对所有这些应用程序开发的东西都非常非常陌生。)我想知道为什么我的 log.d() 方法以错误的顺序将其内容输出到 logcat .我不认为这是一个主要问题,我可能会解决它,但我只是想知道为什么它会这样执行,或者如果我的代码有问题我必须修复。
常驻页面:
public class ResidentPage extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
....
basicReadWrite();
MethodsFromOtherClass.output();
return view;
}
...
public void basicReadWrite(){
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("second message");
myRef.setValue("Hello again, World!");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String value = dataSnapshot.getValue(String.class);
Log.d("ResidentPage", "Value is: " + value);
}
@Override
public void onCancelled(DatabaseError error) {
Log.w("ResidentPage", "Failed to read value.", error.toException());
}
});
}
}
其他方法 class:
public class MethodsFromOtherClass {
public static void output(){
Log.d("ResidentPage", "Called from another class");
}
}
Logcat:
D/ResidentPage: Called from another class
D/ResidentPage: Value is: Hello again, World!
它们并没有按错误的顺序发生。您的代码是异步的。在后台线程上收集数据后调用 ValueEventListener。所以它们可以以任何顺序发生——这将是一个竞争条件,其中一个被调用。 (更实际地说,“从另一个 class 调用”几乎总是首先在上面的代码中发生,因为该线程上的代码很少,因此不太可能安排另一个线程并且 运行 之前主线程到达那里,但你可能会偶尔看到它发生)。
我将 android 应用程序连接到 google 的实时数据库。 (这是为学校准备的,我对所有这些应用程序开发的东西都非常非常陌生。)我想知道为什么我的 log.d() 方法以错误的顺序将其内容输出到 logcat .我不认为这是一个主要问题,我可能会解决它,但我只是想知道为什么它会这样执行,或者如果我的代码有问题我必须修复。
常驻页面:
public class ResidentPage extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
....
basicReadWrite();
MethodsFromOtherClass.output();
return view;
}
...
public void basicReadWrite(){
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("second message");
myRef.setValue("Hello again, World!");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String value = dataSnapshot.getValue(String.class);
Log.d("ResidentPage", "Value is: " + value);
}
@Override
public void onCancelled(DatabaseError error) {
Log.w("ResidentPage", "Failed to read value.", error.toException());
}
});
}
}
其他方法 class:
public class MethodsFromOtherClass {
public static void output(){
Log.d("ResidentPage", "Called from another class");
}
}
Logcat:
D/ResidentPage: Called from another class
D/ResidentPage: Value is: Hello again, World!
它们并没有按错误的顺序发生。您的代码是异步的。在后台线程上收集数据后调用 ValueEventListener。所以它们可以以任何顺序发生——这将是一个竞争条件,其中一个被调用。 (更实际地说,“从另一个 class 调用”几乎总是首先在上面的代码中发生,因为该线程上的代码很少,因此不太可能安排另一个线程并且 运行 之前主线程到达那里,但你可能会偶尔看到它发生)。