我正在使用泄漏漏斗,它说您的底片碎片正在泄漏。但我看不出问题出在哪里。
我该如何解决该泄漏?
fun Resources.getQuantityText(
id: Int,
quantity: Int,
vararg formatArgs: Any
): CharSequence {
return HtmlCompat.fromHtml(
getQuantityString(id, quantity, *formatArgs),
HtmlCompat.FROM_HTML_MODE_COMPACT
)
}
这是我的启动方式:
public class TokensExplainedFragment extends BottomSheetDialogFragment implements HasSupportFragmentInjector {
private static final String TAG = "TokensExplainedFragment";
private View mainView;
@Inject
DispatchingAndroidInjector<Fragment> childFragmentInjector;
@Inject
SessionManager sessionManager;
@Inject
ViewModelProviderFactory providerFactory;
public TokensExplainedFragment() {
}
@Override
public void onAttach(Context context) {
AndroidSupportInjection.inject(this);
super.onAttach(context);
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mainView = inflater.inflate(R.layout.fragment_tokens_explained, container, false);
return mainView;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
BottomSheetDialog dialog = (BottomSheetDialog) super.onCreateDialog(savedInstanceState);
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
BottomSheetDialog d = (BottomSheetDialog) dialog;
FrameLayout bottomSheet = (FrameLayout) d.findViewById(com.google.android.material.R.id.design_bottom_sheet);
BottomSheetBehavior.from(bottomSheet).setState(BottomSheetBehavior.STATE_EXPANDED);
}
});
return dialog;
}
@Override
public AndroidInjector<Fragment> supportFragmentInjector() {
return childFragmentInjector;
}
}
泄漏跟踪:
答案 0 :(得分:0)
getSupportFragmentManager
和getFragmentManager
都是顶级Activity上的片段管理器。要在片段级别内管理片段,请使用getChildFragmentManager
bottomSheetFragment.show(getChildFragmentManager(), bottomSheetFragment.getTag());
答案 1 :(得分:0)
根据Android sources,ConnectivityThread为:
系统的共享单例连接线程。这是一个线程 连接操作,例如与系统服务的AsyncChannel连接。 各种连接管理器对象可以将此单例用作公共对象 处理程序的资源,而不是创建自己的单独线程。
在这里,我们可以看到该线程正在运行,并且在该线程上执行并正在执行的消息引用了TokensExplainedFragment。
我怀疑TokensExplainedFragment的功能远不止StackOverflow中共享的功能(例如,使用sessionManager编写的一些代码),在那段额外的代码中,可能会有一些调用连接系统服务的事情(例如,wifi,互联网,蓝牙等)。这可能会导致向连接线程发送延迟的消息,并且该消息应被取消,但不是。