启动GC和点击机器人工作室监视器转储Java堆后,这一形象出现下面
什么是$旁边类DialogFrag就像在DialogFrag $ 1中意味着什么? (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);
}
其实我循环七次显示和对话片段的同一个实例解雇,我有一个异步任务里,这是否意味着从它的AsyncTask可能的内存泄漏?虽然我取消它,将其设置为null每当我驳回dialogfragment – has19
我有添加对话框FRAG代码,如果你可以检查 – has19
首先,不要创建'onCreateDialog'异步任务。这是一个UI回调,它被调用,例如每次你旋转手机。如果你真的只是“在这里计算某些东西”,可以使用除“AsyncTask”之外的其他工具,也许是['IntentService'](https://developer.android)。COM /培训/运行后台服务/创建-service.html)。然后使用[事件总线](https://github.com/greenrobot/EventBus)将服务结果发布到您的用户界面。 –