在Android片段上获取内存泄漏

v3nant

我一直在我的android应用程序上寻找“内存泄漏”问题的解决方案,但是,这是一件事情:
我正在将一个片段加载到viewpager中,该片段具有Gridview和创建的Adapter(ArrayAdapter)在gridview的每个项目中,这些项目都有一个图像和一些文本(我正在使用Universal Image Loader加载图像。)

当我更改设备方向时,我会遇到很多内存泄漏。

  • 我已将所有适配器上下文更改为ApplicationContext。
  • 我已将图像加载器插件(通用图像加载器)更改为Picasso
  • 我已经将ArrayAdapter更改为BaseAdapter。
  • 我已将Gridview更改为FlowLayoutView,并将所有项目作为视图添加到此新ViewGroup。
  • 还使用android进行了测试,没有“调试”。

这些更改中没有一个起作用,我仍然遇到内存泄漏,因此,欢迎您提供任何帮助!

编辑:

public class MoviesFragment extends Fragment {

public MoviesFragment() {
}

final String TAG = MoviesFragment.class.toString();
ExpandableHeightGridView movieGridView;
MovieAdapter mMovieAdapter;
ArrayList<Movie> movies;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Bundle args = getArguments();
    movies = args.getParcelableArrayList("movies");
    mMovieAdapter = new MovieAdapter(getActivity().getApplicationContext(), movies);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    final View rootView = inflater.inflate(R.layout.fragment_movies, container, false);
    movieGridView = (ExpandableHeightGridView) rootView.findViewById(R.id.gridview_movies);

    if (movies != null) {

        movieGridView.setAdapter(mMovieAdapter);
        movieGridView.setExpanded(true);
        movieGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                EventBus.getDefault().post(
                        new EventSelectedEvent((Movie) parent.getItemAtPosition(position)));
            }
        });
    } else {
        movieGridView.setExpanded(false);
    }
    return rootView;
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

}

}

public class MovieAdapter extends ArrayAdapter<Movie> {

Context context;

public MovieAdapter(Context context, List<Movie> movies) {
    super(context, 0, movies);
    this.context = context.getApplicationContext();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // Get the data item for this position
    Movie movie = getItem(position);
    // Check if an existing view is being reused, otherwise inflate the view
    if (convertView == null) {
        convertView = LayoutInflater.from(getContext().getApplicationContext()).inflate(R.layout.layout_card_movies, parent, false);
    }
    // Lookup view for data population
    TextView movieName = (TextView) convertView.findViewById(R.id.card_movie_text);

    //Load square image
    Image squareImg = movie.getSquareImage();
    if (null != squareImg) {
        ImageLoader iLoader = ImageLoaderHandler.getImageLoader(TandasApplication.getInstance());
        iLoader.displayImage(squareImg.getLink(),
                (ImageView) convertView.findViewById(R.id.card_movie_image));
    }

    //Title
    movieName.setText(movie.getTitle());

    //Rating
    LinearLayout ratingContainer = (LinearLayout) convertView.findViewById(R.id.ratingMovieMainView);
    double rating = movie.getRating();
    UIUtils.buildRatingStars(rating, ratingContainer, context);

    // Return the completed view to render on screen
    return convertView;
}

}

胡安·阿塞维多(Juan Acevedo)

没有足够的信息继续进行,我认为您正在使用片段引用。

使用adb shell命令dumpsys对此进行测试

adb shell dumpsys activity <package_name>
adb shell dumpsys meminfo <package_name>

浏览各个片段,并在每次浏览其中一个片段后运行该片段。Meminfo会告诉您该应用程序正在进行多少活动。活动为您分解了一切。

如果您张贴一些日志或代码,我可以为您提供更好的帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

传递片段时Android内存泄漏

来自分类Dev

Android-带有片段的设备内存泄漏

来自分类Dev

这是iOS / Android上的内存泄漏吗

来自分类Dev

Textview上的Android内存泄漏-LeakCanary(泄漏可以忽略)

来自分类Dev

methodSignatureForSelector上的内存泄漏

来自分类Dev

`initWithNibName` 上的内存泄漏

来自分类Dev

Android动画内存泄漏

来自分类Dev

静态资源成员变量上的Android内存泄漏?

来自分类Dev

设备上的Android内存泄漏,而不是模拟器上的泄漏

来自分类Dev

获取内存泄漏-NSData转换

来自分类Dev

iOS上的ZBar内存泄漏?

来自分类Dev

setData()上的CKEditor内存泄漏

来自分类Dev

在malloc上的Valgrind内存泄漏

来自分类Dev

Heroku上的Sidekiq内存泄漏

来自分类Dev

18.10 上奇怪的内存泄漏

来自分类Dev

Android Fragment Webview内存泄漏

来自分类Dev

Android runOnUiThread导致内存泄漏

来自分类Dev

Android runOnUiThread导致内存泄漏

来自分类Dev

Android WebView发生内存泄漏

来自分类Dev

防止Android中的内存泄漏

来自分类Dev

Android WeakReference处理内存泄漏

来自分类Dev

Android 内存泄漏 - 匿名类

来自分类Dev

在服务器停止上获取内存泄漏错误(Eclipse,Hibernate,Spring)

来自分类Dev

位图导致设备上的内存泄漏

来自分类Dev

Tomcat的上HttpURLConnection类的内存泄漏警告

来自分类Dev

Valgrind报告QThread :: start()上的内存泄漏

来自分类Dev

HEAD请求上的Volley内存泄漏

来自分类Dev

如何防止iOS上的ARC内存泄漏

来自分类Dev

Android:在片段上创建按钮时获取classcastexception