代码中动态addView的坑

代码中动态addView的坑,第1张

1.一个view控件,先new出来做初始化处理,addview(view)中,再获取此view的.getLayoutParams(),设置view的高宽,padding的设置是在view本身有的方法,view.setPadding(left,top,right,bottom)

2.

在LinearLayout中动态addview,两种方式:a:addView(viewA)

结果:

再过去viewA的getLayoutParams() 设置viewA的宽高,

结果:

b:addView(view,layoutParams)

结果:

为什么第一种方式会导致第二个textview内容显示不会超过第一个textview的宽度

需要了解

1.WebView常见的一些坑

2.关于WebView的内存泄漏问题

----------------Web常见的一些坑-------------------

1.该漏洞源于程序没有正确限制使用WebView.addJavascriptlnterface方法,远程攻击者可以通过使用JavaReflectionApi利用该漏洞执行任意Java对象的方法

2.webView在布局文件中使用:webview写在其他容器中时

    解决办法:需要销毁webView 在Ondestory方法里先把linelayout里的WebView.remove掉 然后再调用webView的removeAllviews和Destory方法 才能真正的将WebView销毁 从而不导致内存泄漏

3.webviewClient.onPageFinished(会判断网页内容是否真的加载完毕,如果当前正在加载的网页产生跳转,这个方法就会被调用无数次) --->所以调用:WebChromeClient.onProgressChanged

4.后台耗电

5.WebView硬件加速导致页面渲染的问题(容易出现页面加载白块 页面闪烁)

    解决办法:设置WebView暂时关闭硬件加速

-----------------关于WebView的内存泄漏问题-----------------

  1.为什么会造成内存泄漏?

    因为WebView首先会关联Activity而内部执行的 *** 作会在新的线程当中.Activity的生命周期和新线程的生命周期是不一样的所以说导致了WebView他会一直持有activity的对象引用不能回收、

  2.如何避免内存泄漏?

    方法一:开启独立进程给WebView进行 *** 作 (会牵扯到近程通信比较麻烦)

    方法二:动态添加WebView (我们要对传入WebView的Context进行弱引用 在Activity停止时remove掉)\

开发过程中通常使用方法一 因为 1>这个webview使用完毕后直接杀死进程防止内存泄漏

      2>我们App的主进程减少了内存容量

final LinearLayout layout2=new LinearLayout(this)//定义一个新的LinearLayout

layout2.setOrientation(LinearLayout.HORIZONTAL)//设置为水平

for(int i=0i<6i++) //向LinearLayout中添加按钮

{

Button button=new Button(this)

button.setId(i)

button.setText("i"+i)

layout2.addView(button)

}

horizontalscrollview=(HorizontalScrollView)findViewById(R.id.hs1)

horizontalscrollview.addView(layout2)//向水平滚动条中添加LinearLayout


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11780180.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存