在.hprof文件android studio中,$意味着什么

时间:2016-07-28 09:57:33

标签: android android-studio

启动Gc并在android studio monitor中单击dump java heap后,将显示以下图片:

enter image description here

在DialogFrag $ 1中,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);
        }

2 个答案:

答案 0 :(得分:3)

  

在DialogFrag $ 1中,DialogFrag类旁边的$是什么意思?

$number表示匿名内部类,例如new View.OnClickListener() {...}

  

但正如你在DialogFrag $ 1旁边看到的那样,总数是7,这是否意味着我有内存泄漏?

也许,你有七次旋转手机吗?

请记住在适当的生命周期方法中取消注册侦听器和BroadcastReceiver。尽量避免使用静态字段。

答案 1 :(得分:1)

带有$的班级名称代表内部班级

命名法是ClassName$InnerClassName

当您看到数字而不是实际名称时,它们是在您的方法中创建的匿名内部类。

E.g。 ClassName$1

在您的情况下:

问题是将AsyncTask定义为匿名类asyncTask=new AsyncTask<Void, Void, Void>() ...创建一个单独的类并在需要时创建该类的实例。