android – 关于活动生命周期和资源删除分配的问题

android – 关于活动生命周期和资源删除分配的问题,第1张

概述我对这个生命周期的事情一直很困惑,所以我做了一点经验.简而言之:结果显示,当一个进程在被销毁之后被创建时,在上一个会话中分配的UI对象都已经消失,需要重新创建(这是预期的).但是在上一个会话中分配的其他内存空间仍可用于此会话. 让我感到惊讶的是:系统的UI对象(如ListView)和我分配的内存空间不会同时被破坏.为什么他们不同时死亡(或活着)? 查看此处的体验: public class Pra 我对这个生命周期的事情一直很困惑,所以我做了一点经验.简而言之:结果显示,当一个进程在被销毁之后被创建时,在上一个会话中分配的UI对象都已经消失,需要重新创建(这是预期的).但是在上一个会话中分配的其他内存空间仍可用于此会话.

让我感到惊讶的是:系统的UI对象(如ListVIEw)和我分配的内存空间不会同时被破坏.为什么他们不同时死亡(或活着)?

查看此处的体验:

public class PracticeActivity extends ListActivity {    @OverrIDe    public voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        // If there is left-over value in G.count[99],then do not populate        // the ListVIEw.         if (G.count[99] == 0) {            ListVIEw lv = getListVIEw();            lv.setAdapter(new ArrayAdapter<String>(this,androID.R.layout.simple_List_item_1,m_Starbucks));        }        Log.d("TAG",messageformat.format("Created,count = {0,number}",G.count[99]));        Log.d("TAG",messageformat.format("Starbucks = {0}",m_Starbucks[0]));        G.count[99]++;                              // increment the count        m_Starbucks[0] = "Coffee Frappuccino";      // and change the menu    }    @OverrIDe public voID onRestart() { super.onRestart(); Log.d("TAG","Restarted"); }    @OverrIDe public voID onStart() { super.onStart(); Log.d("TAG","Started"); }    @OverrIDe public voID onResume() { super.onResume(); Log.d("TAG","Resumed"); }    @OverrIDe public voID onPause() { super.onPause(); Log.d("TAG","Paused"); }    @OverrIDe public voID onStop() { super.onStop(); Log.d("TAG","Stopped"); }    @OverrIDe public voID onDestroy() {         super.onDestroy();        if (isFinishing())            Log.d("TAG","Destroyed -- someone finished me");        else            Log.d("TAG","Destroyed -- system needs resources");    }    private static final String[] m_Starbucks = {        "Latte","Cappuccino","Caramel Macchiato","Americano","Mocha","White Mocha","Mocha Valencia","Cinnamon Spice Mocha","Toffee Nut Latte","Espresso","Espresso Macchiato","Espresso Con Panna"    };}

这是G.java文件中定义的类G:

public class G {    public static int[] count = new int[100];}

运行此测试产生以下结果:

Created,count = 0Starbucks = LatteStartedResumedPausedStoppedDestroyed -- someone finished meCreated,count = 1Starbucks = Coffee FrappuccinoStartedResumed

在第一个会话中,count [99]的值为0,因此程序将填充ListVIEw,所以一切都很好.

在第二个会话中,count [99]仍保留第一个会话剩余的值,因此程序没有填充ListVIEw,希望ListVIEw也可用.但事实并非如此,结果是黑屏.这意味着从上次会话中保留了G.count [](m_Starbucks []也是如此),但ListVIEw没有生存.

很明显,系统中只有一个PracticeActivity实例,当这个实例消亡时,PracticeActivity和G类都应该死掉.但他们没有,他们仍保留上一届会议的价值观.

问题:

>如果count []和m_Starbucks []是
仍然可用,那么这意味着
PracticeActivity和G都是
还活着.然后是ListVIEw的原因
到哪里去了?不应该全部死亡或
住在同一时间?
>当我看到我的一些课程时
成员持有他们的旧价值观
上次会议,我能相信吗?
我所有班级的成员也都有效???即,AndroID
在一个全有或全无的情况下杀死我的资源
时尚?或者,它可以删除一些和
离开其他人? (这个问题
不应该存在于第一个
地方,但看到了结果
经验,人们开始怀疑.)

任何人都可以对此有所了解吗?非常感激.

解决方法 只要JVM(DVM)存在,静态类成员就会活着 – 这可能(当然也可能)长于 你的活动生命周期.您的活动可能会被破坏,但静态字段会在其中存活. 总结

以上是内存溢出为你收集整理的android – 关于活动生命周期和资源删除/分配的问题全部内容,希望文章能够帮你解决android – 关于活动生命周期和资源删除/分配的问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

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

原文地址: http://outofmemory.cn/web/1124172.html

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

发表评论

登录后才能评论

评论列表(0条)

保存