电脑安全

您当前的位置:主页 > 电脑安全 >

彻底理解引用在 Android 和 Java 中的工作原理-网络

来源:[db:来源]标题:   内存    编辑:电脑技术全能网 时间:2019-09-18 16:50

原标题:彻底理解引用在 Android 和 Java 中的工作原理-网络
   本文讲的是完全懂得援用在 Android 和 Java 中的任务道理,几周前,我很幸运地加入了在波兰进行的 Mobiconf ,挪动开辟者加入的最好的研究会之一。我的友人兼共事 Jorge Barroso 做了个名为“最好(精良)的做法”的演说 ,这让我在听后很有感想:关于一个 Android 开辟者,假如你不应用 WeakReferences,这是有成绩的。举个适当的例子,几个月前,我公布了我的最初一本书 “Android High Performance”, 联席作者是 Diego Grancini。最热点的章节之一就是探讨 Android 的内存治理。在本章中,咱们先容了挪动装备中内存的任务道理,内存泄露是怎样产生的,为甚么这个是主要的,以及咱们能够利用哪些技巧来避开它们。由于我从开辟 Android 起,就经常看到这么种偏向:鄙弃乃至疏忽所有与内存泄露和内存治理相干的成绩。曾经满意开辟需要了,为何要庸人自扰呢?咱们老是急于开辟新的功效,咱们情愿鄙人一个 Sprint 演示中浮现一些可见的货色,也不会关怀那些没有人一眼就能看到的货色。这无疑是招致技巧债权一个活生生的例子。 我乃至能够弥补地说,技巧债权在事实天下中也有一些影响,那是咱们不能用单位测试权衡的:扫兴,开辟者间的磨擦,低品质的软件和踊跃性的损失。这类影响难以权衡的起因是在于它们经常产生在久远的未来的某个时光点。这有点像政客:假如我只当政 8 年,为何我要烦心 12 年后将要产生的事呢?除了在软件开辟,所有都以更快的方法。编写软件开辟中应当采用的计划思维能够须要一些大篇文章,并且曾经有许多书和文章可供您参考。但是,扼要地说明差别范例的内存援用,它们详细是甚么,以及怎样在 Android 中应用,这是个绝对冗长的义务,这也是我想在本文中做的。起首:Java 中的援用是甚么?援用指向了一个工具,你能经过援用拜访工具。Java 默许有 4 品种型的援用:强援用(StrongReference)、软援用(SoftReference)、弱援用(WeakReference) 和虚援用(PhantomReference)。局部人以为只要强援用和弱援用两品种型的援用,而弱援用有两个档次的弱化。咱们习气于将生涯中的所有事物归类,那种毅力堪比动物学家对动物的分类的。不管你感到哪类分类更好,起首你须要去懂得这些援用。而后你能够找出本人的分类。种种援用都是甚么意义?StrongReference: 强援用是 Java 中最为罕见的援用范例。任何时间,当咱们创立了一个工具,强援用也同时被创立了。比方,当咱们这么做:MyObject object = new MyObject();一个新的 MyObject 工具被创立,指向它的强援用保留在 object 中。你还在看吧? 嗯,更故意思的事件来了,这个 object 是能够强行达到的——意义就是,它能够经过一系列强援用找到,这将会禁止渣滓接纳机制接纳它,但是,这恰是是咱们最想要的。当初,咱们来看个例子。0.jpg花几分钟,实验去找能够呈现成绩的点。不必担忧,假如一时找不到,那再花点时光看看。当初呢?AsyncTask 工具会在 Activity onCreate() 方式中创立并运转。但这里有个成绩:外部类在它的全部性命周期中是会拜访内部类。假如 Activity 被 destroy 掉时,会产生甚么? AsyncTask 依然持有 Activity 的援用,以是 Activity 是不能被 GC 接纳的。这就是咱们所说的内存泄露。旁注 :从前,我已经对适合的人停止访谈,我问他们怎样创立内存泄露,而不是讯问内存泄露的实践方面。这老是更有味!内存泄露现实上不只产生在 Activity 本身烧毁的时间,设置的转变(译者注:比方横屏切换成竖屏)或体系须要更多的内存时,也能够体系强行烧毁。假如 AsyncTask 庞杂点(比方,持有 Activity 上的 View 的援用),它乃至会招致瓦解,由于 view 的援用是 null。(译者注:这个是直译过去的,能够对局部同窗来讲,不太好懂得。我举个例子吧,比方 AsyncTask 中援用了 ProgressDialog,AsyncTask 运转时会表现 ProgressDialog,当横屏切成竖屏时,这时会呈现瓦解。(╯^╰〉)那末,要怎样避免这类成绩再次产生呢?咱们接上去先容另一品种型的援用:WeakReference:弱援用是援用强度缺乏以将工具坚持在内存中的援用。假如渣滓接纳机制试图断定工具的援用强度,假如刚好是经过 WeakReferences 援用,那末该工具将被渣滓接纳。为了便于懂得,最好是先抛开实践,用上个例子来讲明怎样应用 WeakReference 来幸免内存泄露:

上一篇:PHP网络开发详解:SQL注入漏洞-网络编程

下一篇:没有了