通过leakcanary检测内存泄漏,老是出现InputMethodManager引起的内存泄漏,查看过很多资料,应该是android源码的bug。leakcanary官方提供的解决这个问题的方法,测试发现没有用。通过反复查阅测试发现下面的方法可以解决这个问题,所以记录下来
先写一个透明的过渡Activity
/**
* 解决InputMethodManager引起的内存泄漏
* Created by liuxin on 2018/4/8.
*/
public class DumpActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
finish();
}
}, 500);
}
}
为这个Activity应用透明主题
配置清单文件
<activity
android:name=".ui.DumpActivity"
android:theme="@style/AppTheme.Transparent"
/>
style.xml
<!-- Customize theme for floating. -->
<style name="AppTheme.Transparent" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
在会发生内存泄漏的Activity调用
@Override
public void onBackPressed() {
super.onBackPressed();
startActivity(new Intent(this, DumpActivity.class));
finish();
}