Java Android Firebase-从任务中删除侦听器<;T>;
我在Java Android Firebase-从任务中删除侦听器<;T>;,java,android,firebase,firebase-storage,Java,Android,Firebase,Firebase Storage,我在MyActivity类中定义了这个方法,它允许我从Firebase存储器中下载一些数据 public void submitDownload() { Task<byte[]> downloadTask=FirebaseStorage.getInstance. getReference(DATA_PATH_TO_DOWNLOAD).getBytes(MAX_BYTES); isTaskActive=true; //remove ev
MyActivity
类中定义了这个方法,它允许我从Firebase
存储器中下载一些数据
public void submitDownload() {
Task<byte[]> downloadTask=FirebaseStorage.getInstance.
getReference(DATA_PATH_TO_DOWNLOAD).getBytes(MAX_BYTES);
isTaskActive=true;
//remove eventually a previous callback from the handler
timeoutHandler.removeCallbacks(timeoutCallback);
downloadTask.addOnSuccessListener(MyActivity.this, onSuccessListener);
downloadTask.addOnFailureListener(MyActivity.this, onFailureListener);
timeoutHandler.postDelayed(timeoutCallback, 5000);
}
显然,onSuccessListener
、onFailureListener
、timeoutHandler
、timeoutCallback
和isTaskActive
都是实例变量
正如您在timeoutCallback
中定义的run()
方法中所看到的,除了日志消息之外,还被称为sumbitDownload()
。实际上,如果出现超时且任务仍处于活动状态,则会启动新的下载
现在,想象一下这个场景。
创建活动时,将启动下载任务。假设downloadTask
没有完成,并且既没有调用onSuccessListener
也没有调用onFailureListener
,但发生超时。因此,从timeoutCallback
的run()
方法开始新的下载。
现在,前面的下载任务发生了什么变化?取消了吗?它是否被当前任务替换?或者它是否继续处于活动状态并可能触发其连接的侦听器
如果后一个问题是真的,那么如何从任务
对象中删除侦听器?
但是,getResult()
方法是否完成(即完成)任务
protected void onCreate() {
super.onCreate();
onSuccessListener=new OnSuccessListener<byte[]>() {
public void onSuccess(byte[] bytes) {
if(isTaskActive) {
isTaskActive=false;
Log.d("DOWNLOAD_TASK", "SUCCESS");
}
}
};
onFailureListener=new OnFailureListener() {
public void onFailure(Exception e) {
if(isTaskActive) {
isTaskActive=false;
Log.d("DOWNLOAD_TASK", "FAILURE");
}
}
};
timeoutHandler=new Handler();
timeoutCallback=new Runnable() {
public voi run() {
if(isTaskActive) {
isTaskActive=false;
Log.d("DOWNLOAD_TASK", "TIMEOUT");
submitDownload(); //retry download
}
}
};
submitDownload();
}