Android 显示其他类的toast时内存泄漏

Android 显示其他类的toast时内存泄漏,android,firebase-realtime-database,memory-leaks,leakcanary,Android,Firebase Realtime Database,Memory Leaks,Leakcanary,我使用泄漏金丝雀来检测内存泄漏。在我的活动中,我正在调用另一个类中的一个方法,用于更新firebase实时数据库中的数据,在addOnCompleteListener()上显示成功toast,在addOnFailureListener()上显示错误toast。由于toast需要上下文,我已经扩展了应用程序以获得应用程序上下文,所以我还没有从我的活动中传递上下文,因为读了一些文章我才知道传递上下文会导致内存泄漏。这是我在数据库中更新的类 公共类FireBaseUpdater扩展应用程序{ 私人语境

我使用泄漏金丝雀来检测内存泄漏。在我的活动中,我正在调用另一个类中的一个方法,用于更新firebase实时数据库中的数据,在
addOnCompleteListener()
上显示成功toast,在
addOnFailureListener()
上显示错误toast。由于toast需要上下文,我已经扩展了
应用程序
以获得应用程序上下文,所以我还没有从我的活动中传递上下文,因为读了一些文章我才知道传递上下文会导致内存泄漏。这是我在数据库中更新的类

公共类FireBaseUpdater扩展应用程序{
私人语境;
private DatabaseReference ref=FirebaseDatabase.getInstance().getReference();
私有FirebaseUser用户=FirebaseAuth.getInstance().getCurrentUser();
公共FireBaseUpdater(){
this.context=getApplicationContext();
}
公共作废检索簿(字符串bookId,final BookInfo BookInfo){
最终书籍[]书籍=新书[1];
ref.child(“Books”).child(bookId).addListenerForSingleValueEvent(新值EventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
book[0]=dataSnapshot.getValue(book.class);
bookInfo.onCallback(book[0]);
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
}
公共作废接受(最终BookRequestData BookRequestData){
RetrieveBook(bookRequestData.getReqBookId(),new BookInfo()){
@凌驾
公开作废一次回拨(簿册){
Map childUpdates=newhashmap();
childUpdates.put(“/Books/”+bookRequestData.getReqBookId(),book);
childUpdates.put(“/Requests/”+bookRequestData.getReqId()+“/status”,StaticValues.REQUESTE_接受);
参考updateChildren(儿童更新)
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
success(context,bookRequestData.getReqUserName()+“'s request accepted”,Toast.LENGTH_SHORT,true).show();
}
}
})
.addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
错误(上下文,bookRequestData.getReqUserName()+““的请求未被接受”,Toast.LENGTH_SHORT,true).show();
}
});
}
});
}
}
我的
BookInfoActivity
很大。我只添加了
内存泄漏的可能原因

公共类BookInfoActivity扩展了AppCompatActivity{
@凌驾
创建时的公共void(Bundle savedInstanceState){
BookViewModelFactory modelFactory=新的BookViewModelFactory(bookLight.getBookId());
BookViewModel viewModel=ViewModelProviders.of(这是modelFactory.get(BookViewModel.class));
LiveData LiveData=viewModel.getBookLiveData();
liveData.observe(这个,新的观察者(){
@凌驾
更改后的公共作废(Book Live){
//其他东西
}
checkSameReq(新的FirebaseCallBack(){
@凌驾
一次回拨公共作废(最终BookRequestData reqData){
requestBtn.setOnClickListener(新视图.OnClickListener()
{
如果(请求){
FireBaseUpdater fireUpdate=新的FireBaseUpdater();
接受(bookRequest);
}
}
});
}
});
}
私有void checkSameReq(最终FirebaseCallBack FirebaseCallBack){
ref=mdatabase.getReference();
sameReqCheck=ref.child(“用户”).child(book.getOwnerID()).child(“pendingRequest”).orderByChild(“reqUserId”).equalTo(user.getUid());
sameReqCheckValEventListener=newvalueeventlistener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
布尔sameReqCheck=false;
final BookRequestData[]requestData={null};
Log.e(“shanto2”,String.valueOf(dataSnapshot.getChildrenCount());
对于(DataSnapshot reqSnapshot:DataSnapshot.getChildren()){
BookRequestData BookRequestData=reqSnapshot.getValue(BookRequestData.class);
if(bookRequestData.getReqBookId().equals(book.getBookId())){
sameReqCheck=true;
requestData[0]=bookRequestData;
打破
}
}
如果(!sameReqCheck){
requestBooks.setText(请求书);
}否则{
requestBooks.setText(取消请求);
}
书报(书);
if(book.getAcceptedReqId().length()>0){
requestRef=ref.child(“Requests”).child(book.getAcceptedReqId());
reqEventListener=新值EventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
BookRequestData BookRequestData=dataSnapshot.getValue(BookRequestData.class);
if(book.getCurrentOwnerId().equals(user.getUid())&&bookRequestData.getStatus()==StaticValues.REQUESTE\u接受){
requestBooks.setText(明白了);