You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中Fragment内使用Glide生成视频缩略图的正确方式

Fragment中用Glide生成视频缩略图的正确姿势

你遇到的问题是因为onCreateView()阶段Fragment还没完全和Activity绑定,直接传this(Fragment实例)会让Glide拿不到有效的生命周期上下文,导致加载失败。

给你几个靠谱的解决方法:

  • 用布局View的上下文:在onCreateView()里inflate完布局后,直接用view.getContext()当Glide的上下文,这是最稳妥的:

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.your_fragment_layout, container, false);
        
        Glide.with(view.getContext())
                .asBitmap()
                .load(uri)
                .into(new CustomTarget<Bitmap>() {
                    @Override
                    public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
                        bitmapThumbnail = resource;
                        // 拿到Bitmap后就可以传给其他Fragment了
                    }
    
                    @Override
                    public void onLoadCleared(@Nullable Drawable placeholder) {
                        // 这里可以做资源清理,防止内存泄漏
                    }
                });
        
        return view;
    }
    
  • 用Activity上下文:等Fragment完全绑定Activity后,比如在onActivityCreated()方法里,用requireActivity()(强制获取Activity,避免空指针):

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        
        Glide.with(requireActivity())
                .asBitmap()
                .load(uri)
                .into(new CustomTarget<Bitmap>() {
                    @Override
                    public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
                        bitmapThumbnail = resource;
                    }
    
                    @Override
                    public void onLoadCleared(@Nullable Drawable placeholder) {
                        // 清理资源
                    }
                });
    }
    

另外提醒一句:你之前用的SimpleTarget已经过时了,Glide 4.x之后推荐用CustomTarget,能更好地处理资源回收,减少内存泄漏风险。

最后,要是要把Bitmap传给其他Fragment,建议用ViewModel或者接口回调的方式,别直接存大对象,容易占内存。

内容的提问来源于stack exchange,提问作者Samy Sylvester

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 23:05:16