想一想:
Android应用程序的主要线程是管理UI的线程,因此如果要等到方法f()完成,屏幕将冻结.您可能会认为一个好的解决方案是生成一个新线程并在其中调用方法f()并使用callable或future来等待f().错误.线程创建下面的代码将执行,因此您将遇到相同的问题.
那怎么解决这个问题呢?简单.重新设计您的应用程序并使用监听器,a.k.a.回调.
编辑:侦听器或回调只是一个类A实现的方法(或方法),并将此实现传递给类B来执行它. B级不知道他正在执行什么,他只是执行一个方法.
例:
public class A{
public A (){
B b = new B (new B.Listener (){
@Override
void onResult (String result){
//result is "Core dumped!"
}
});
b.aMethod ();
}
}
public class B{
private final Listener listener;
public static interface Listener{
void onResult (String result);
}
public B (Listener listener){
if (listener == null) throw new IllegalArgumentException ("The \"listener\" parameter cannot be null.");
this.listener = listener;
}
public void aMethod (){
//Do something interesant
//...
String error = "Core dumped!"
//Call the listener
listener.onResult (error);
}
}
在你的情况下,你将有类似的东西:
public class YourClass{
public void aMethod (){
FaceBookClass fb = new FaceBookClass ();
fb.setListenerToF (new FaceBookClass.FListener (){
@Override
void theCallback (Result aResult){
//Do something with result
}
});
fb.f ();
}
}
public class FaceBookClass{
public static interface FListener{
void theCallback (Result aResult);
}
public void f (){
...
}
public void setListenerToF (FListener listener){
...
}
}