В методе MessageFeedActivity onCreate он загружает каналы, вызывая getMessageTypes метод CTFeedAPI класса.
public class MessageFeedActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Setting the listener
CTFeedAPI ctFeedAPI = new CTFeedAPI(new CTFeedAPI.CTFeedAPIListener() {
@Override
public void feedAPISuccessListener(Object object) {
// Handle Success
}
@Override
public void feedAPIErrorListener(int error) {
// Handle Error
}
});
ctFeedAPI.getMessageTypes();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
и ожидает CTFeedAPIListener ответ. И CTFeedAPI класс делает сетевой запрос, вызывая executeRequest метод NetworkRequest класса как
public class CTFeedAPI implements NetworkListener {
private CTFeedAPIListener apiListener;
public CTFeedAPI(CTFeedAPIListener feedAPIListener) {
apiListener = feedAPIListener;
}
public void getMessageTypes() {
Map < String, String > params = new HashMap < > ();
params.put("f", "GetMessageTypes");
NetworkRequest networkRequest = new NetworkRequest(this);
networkRequest.performRequest();
}
public interface CTFeedAPIListener {
void feedAPISuccessListener(Object object);
void feedAPIErrorListener(int error);
}
}
и ожидает NetworkListener response
public class NetworkRequest {
private NetworkListener mListener;
public interface NetworkListener {
void networkReqSuccessListener(String cacheKey, String tag, String response);
void networkReqErrorListener(String tag, int error);
}
public NetworkRequest(NetworkListener listener) {
this.mListener = listener;
}
public void performRequest(
// Perform Network Requests and respond as
if (mListener != null) {
if (success) {
mListener.networkReqSuccessListener(getUrl(), getTag(), response);
} else {
mListener.networkReqErrorListener(getTag(), err_msg);
}
}
}
Когда пользователи нажимают клавишу «назад», перед тем как уничтожить MessageFeedActivity, системный вызов метода «onDestroy». И, к сожалению, поскольку фоновый поток (метод executeRequest в классе NetworkRequest) по-прежнему сохраняет ссылку на него, возникает утечка.
Итак, как реализовать ссылку CTFeedAPIListener в MessageFeedActivity для устранения утечки.