写在前面
很久没有进行的写作了,似乎什么都坚持不了很长的时间呀,此刻是比较无聊,开始这文档来记录一些开发遇到的一些问题吧,仅为记录,内容无序,会比较杂乱。
Dialog不显示的问题
大的可能性是调用顺序的问题,Dialog的生命周期是在调用show()方法后开始的,onCreate只会在首次调用show方法时执行一次。
Android P(target Api 28)要求应用使用加密连接
为保证用户数据和设备的安全,Google针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的连接,因此运行 Android P 系统的安卓设备无论是接收或者发送流量,未来都不能明码传输
出现java.net.UnknownServiceException: CLEARTEXT communication ** not permitted by network security policy
解决方式:
1、APP改用 https 请求
2、targetSdkVersion 降到27以下
3、更改网络安全配置
首先,在res文件夹下创建一个xml文件夹,然后创建一个network_security_config.xml文件,文件内容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
接着,在AndroidManifest.xml文件下的application标签增加以下属性
<application
...
android:networkSecurityConfig="@xml/network_security_config"
... />
Android5.0 PopupWindow不显示问题
在Android5.1(api 22) 及以下版本,PopupWindow 需要设置宽高才能正常显示。
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1){
this.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
this.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
}
Handler AsyncTask 等匿名内部类可能造成的内存泄漏
Java中匿名内部内会隐式持有外部类的引用,可能会造成外部类无法回收,从而引起内存泄漏。
private static class MyHandler extends Handler {
WeakReference<Activity > mActivityReference;
MyHandler(Activity activity) {
mActivityReference= new WeakReference<Activity>(activity);
}
@Override
public void handleMessage(Message msg) {
final Activity activity = mActivityReference.get();
if (activity != null) {
activity.doSomething;
}
}
}
RecyclerView 复用View 出现的内容错乱
关于recyclerview的view复用机制可能导致图片显示出现错乱,比如加载网络图片时,由于网络不好,加载尚未完成的ImageView就已经被复用了,当加载完成的时候就会在已经复用的View进行显示,导致错乱。