在启动Gc并在Android Studio监视器中单击转储Java堆之后,将出现下面的图像:
“$”符号在类名DialogFrag后面的含义是什么?(DialogFrag只是扩展了DialogFragment的一个类)
我应该只有这个类的一个实例,但是如您所见,在DialogFrag$1旁边的总数为7,这是否意味着我有内存泄漏?
编辑:这是我的对话框片段类
public class DialogFrag extends DialogFragment {
AsyncTask<Void,Void,Void> asyncTask;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder alertdialog=new AlertDialog.Builder(getActivity());
alertdialog.setTitle("Solution:");
View view = getActivity().getLayoutInflater().inflate(R.layout.dialogfrag,null);
final MyView myview= (MyView) view.findViewById(R.id.myview);
myview.setVisibility(View.INVISIBLE);
alertdialog.setView(view);
asyncTask=new AsyncTask<Void, Void, Void>() {
@Override
protected void doInBackground(Void... voids) {
//compute something here
}
@Override
protected void onPostExecute(Void param) {
super.onPostExecute(param);
getDialog().findViewById(R.id.progress).setVisibility(View.GONE);
myview.setVisibility(View.VISIBLE);
}
});
asyncTask.execute();
alertdialog.setPositiveButton("SHOW", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
if(!(asyncTask.getStatus()== AsyncTask.Status.FINISHED)){
asyncTask.cancel(true);
}
asyncTask=null;
dismiss();
}
});
alertdialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
if(!(asyncTask.getStatus()== AsyncTask.Status.FINISHED)){
asyncTask.cancel(true);
}
asyncTask=null;
dismiss();
}
});
Dialog dialog=alertdialog.create();
dialog.getWindow().getAttributes().windowAnimations = R.style.MyDialogViewAnimation;
return dialog;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
getDialog().getWindow().setGravity(Gravity.CENTER_HORIZONTAL | Gravity.TOP);
getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
return super.onCreateView(inflater, container, savedInstanceState);
}
onCreateDialog
中创建异步任务。这是一个UI回调,例如每次旋转手机时都会调用它。如果你真的只是想在这里“计算一些东西”,请使用除AsyncTask
之外的其他工具,比如IntentService
。然后使用事件总线将服务的结果发布到您的UI。 - Eugen Pechanec