时间:2021-05-21
Android 开发中线程的分析
今天早上把公司给的任务做完了之后,突然就有点无聊,于是,把以前学的那些东西翻了翻,博客看了看,就看到一个关于线程的博客,有了很大的争议,我也差点误解了(感觉高大上~~~)。整体代码差不多是这样:
package sw.angel.thread; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.util.Log; public class ThreadDemo extends Activity { private static final String TAG = "ThreadDemo"; private int count = 0; private Handler mHandler = new Handler(); private Runnable mRunnable = new Runnable() { public void run() { //为了方便 查看,我们用Log打印出来 Log.e(TAG, Thread.currentThread().getName() + " " +count); count++; setTitle("" +count); //每2秒执行一次 mHandler.postDelayed(mRunnable, 2000); } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //通过Handler启动线程 mHandler.post(mRunnable); } protected void onDestroy() { //将线程销毁掉 //mHandler.removeCallbacks(mRunnable); super.onDestroy(); } }所谓的争议是什么呢?看了这块代码的大概意思,很多人会以为每2s新开一个线程执行,但程序退出时,线程依旧是执行的。博主就在onDestroy()中加上了removeCallbacks()。大概意思就是移除线程(销毁)。
当然,首先指出的一点就是,这个demo是每2秒执行一次Runable。相当于每2秒执行一次主线程,用logcat打印出来。而不是每2秒新开一个线程。而无论你是否加上最后一句话,你会发现线程没有停止过。相当于,隔2秒就执行一次,无限循环下去。
为什么还会执行?嗯,这是个问题。好了,我也不卖关子了。
退出的时候,程序相当于只是 finish 掉了,如果只是简单的finish的话,该程序并没有销毁掉,主线程还继续运行的,只是被前一个activity覆盖而已。
有人说:Android应用本身就是一个进程,当我们退出应用时,这个进程就已经销毁了吧?
可是并没有…
Android的特色:当应用程序退出的时候进程资源并没有销毁,这样做是为了下次启动这个程序的更快…我想Android的思想是达到资源利用率的最大化,但这也有弊端,如果有应用需要系统资源,而系统资源又不够,那么就得去销毁掉其它资源,腾出地方来…
如果你想知道是不是真的没有销毁,你可以在onCreate判断savedInstanceState是否等于NULL就可以知道是不是reinitialized了,或者在onBackPressed调用System.exit(0)真正退出进程。
android的特色之一:并不由用户来销毁activity,activity 的生命周期完全交给系统来管理 ,等系统在适当的时候来回收资源。当你按下backspace键的时候,只是简单的将位于堆栈里下一个activity弹出,将原来的activity压栈而已,系统并保存原来的activity的一些历史信息,并不销毁,等你下次打开的时候,能够很快的恢复。
android的特色之二:进程资源并没被销毁,Activity的主线程也是没有退出的,因此Activity中的消息队列会一致执行下去,当再此启动Activity的时候,又会实例化一Rrunnable,又会向此消息队列中添加一个这个Runnable。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了android编程之多线程编程实现方法。分享给大家供大家参考。具体分析如下:该功能与前面《android开发socket编程之udp发送实例分析》
本文实例总结了Java中线程用法。分享给大家供大家参考。具体分析如下:1.线程是基本调度单元。共享进程的资源,如内存和文件句柄。但有自己的pc(程序计数器),s
Java中线程分为两种类型:用户线程和守护(服务)线程。通过Thread.setDaemon(false)设置为用户线程;通过Thread.setDaemon(
Java多线程中线程间的通信一、使用while方式来实现线程之间的通信packagecom.ietree.multithread.sync;importjava
java开发中,我们经常会遇到线程的问题,比如你做一个商城,就需要考虑它的并发问题等等,今天给大家分享一下java中线程的状态先说线程的第一个状态,是新建状态,