你们有没有遇到类似的内存泄漏? 这就是我目前处理VideoView的方式
@Override
protected void onFinishInflate() {
super.onFinishInflate();
ButterKnife.bind(this);
Uri videoUri = Uri.parse(String.format("android.resource://%s/%s", getContext().getPackageName(), videoRes));
videoView.setVideoURI(videoUri);
videoView.setOnPreparedListener(mp -> {
mp.setLooping(true);
videoView.start();
});
}
这就是我对LeakCanary的看法
任何帮助表示赞赏!
答案 0 :(得分:2)
将ButterKnife与Fragments一起使用时,您需要使用Unbinder
中的onDestroyView()
来正确地取消引用片段的视图 - 因为片段与活动的生命周期不同。
存在相关问题here。
答案 1 :(得分:0)
如果您正在使用Butterknife,请确保取消绑定,如果您不确定在onDestroy中调用videoView.stopPlayback()
答案 2 :(得分:0)
这在我AppCompatActivity
内没有使用Butterknife
第1步:创建实用程序类
public class AudioServiceContext extends ContextWrapper {
public AudioServiceContext(Context base) {
super(base);
}
public static ContextWrapper getContext(Context base) {
return new AudioServiceContext(base);
}
@Override
public Object getSystemService(String name) {
if (Context.AUDIO_SERVICE.equals(name)) {
return getApplicationContext().getSystemService(name);
}
return super.getSystemService(name);
}
}
第2步:在您的活动中,使用此实用程序类
public class YourVideoActivity extends AppCompatActivity {
private VideoView videoView;
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(AudioServiceContext.getContext(newBase));
}
//etc...
}
信用:https://medium.com/@chauyan/confirmed-videoview-leak-on-android-ac502856a6cf
答案 3 :(得分:0)
在videoView.suspend()
或onPause()
或onDestory()
中致电# Calculation of cumulative binomial distribution
def PDP(p, N, min):
pdp=0
for k in range(min, N+1):
pdp += (float(factorial(N))/(factorial(k)*factorial(N-k)))*(p**k)*((1-p)**(N-k))
return pdp
。