- Notifications
You must be signed in to change notification settings - Fork 191
Description
内存泄漏信息:
┬───
│ GC Root: Thread object
│
├─ java.lang.Thread instance
│ Leaking: UNKNOWN
│ Retaining 1.5 MB in 5990 objects
│ Thread name: 'EasyExecutor'
│ ↓ Thread.uncaughtExceptionHandler
│ ~~~~~~~~~~~~~~~~~~~~~~~~
├─ com.haoge.easyandroid.easy.EasyExecutor$TaskWrapper$run$1 instance
│ Leaking: UNKNOWN
│ Retaining 1.5 MB in 5975 objects
│ Anonymous class implementing java.lang.Thread$UncaughtExceptionHandler
│ ↓ EasyExecutor$TaskWrapper$run$1.this$0
│ ~~~~~~
├─ com.haoge.easyandroid.easy.EasyExecutor$TaskWrapper instance
│ Leaking: UNKNOWN
│ Retaining 1.5 MB in 5974 objects
│ ↓ EasyExecutor$TaskWrapper.result
│ ~~~~~~
├─ io.agora.chatdemo.av.DemoCallKitListener$2 instance
│ Leaking: UNKNOWN
│ Retaining 1.5 MB in 5970 objects
│ Anonymous class implementing kotlin.jvm.functions.Function1
│ ↓ DemoCallKitListener$2.val$callback
│ ~~~~~~~~~~~~
├─ io.agora.chat.callkit.ui.EaseCallSingleBaseActivity$3 instance
│ Leaking: UNKNOWN
│ Retaining 1.5 MB in 5969 objects
│ Anonymous class implementing io.agora.chat.callkit.listener.EaseCallKitTokenCallback
│ this$0 instance of io.agora.chatdemo.av.CallSingleBaseActivity with mDestroyed = true
│ ↓ EaseCallSingleBaseActivity$3.this$0
│ ~~~~~~
╰→ io.agora.chatdemo.av.CallSingleBaseActivity instance
Leaking: YES (ObjectWatcher was watching this because io.agora.chatdemo.av.CallSingleBaseActivity received
Activity#onDestroy() callback and Activity#mDestroyed is true)
Retaining 1.5 MB in 5968 objects
key = 3c87f3d8-f77b-470e-ac32-9f733bb87aff
watchDurationMillis = 10939
retainedDurationMillis = 5938
mApplication instance of io.agora.chatdemo.DemoApplication
mBase instance of androidx.appcompat.view.ContextThemeWrapper
代码中使用如下:
public class DemoCallKitListener implements EaseCallKitListener {
...
private final EasyExecutor executor;
...
public DemoCallKitListener(Context context, UsersManager usersManager) { this.mContext = context; this.mUsersManager = usersManager; executor = EasyExecutor.newBuilder(0) .build(); } @Override public void onGenerateRTCToken(String userAccount, String channelName, EaseCallKitTokenCallback callback) { StringBuilder url = buildUrl(userAccount, channelName); getRtcToken(url.toString(), agoraUid, callback); } private void getRtcToken(String tokenUrl, int agoraUid, EaseCallKitTokenCallback callback) { executor.asyncResult(new Function1<Pair<Integer, String>, Unit>() { @Override public Unit invoke(Pair<Integer, String> response) { ... JSONObject object = new JSONObject(responseInfo); String token = object.getString("accessToken"); //Set your avatar nickname setEaseCallKitUserInfo(ChatClient.getInstance().getCurrentUser()); callback.onSetToken(token, agoraUid); ... return null; } }) .asyncTask(notifier -> { try { Pair<Integer, String> response = EMHttpClient.getInstance().sendRequestWithToken(tokenUrl, null, EMHttpClient.GET); return response; } catch (ChatException exception) { exception.printStackTrace(); } return null; }); }