温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

详解Android 开发中的线程

发布时间:2020-12-02 15:50:16 来源:亿速云 阅读:99 作者:Leah 栏目:移动开发

今天就跟大家聊聊有关详解Android 开发中的线程,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

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,又会向此消息队列中添加

看完上述内容,你们对详解Android 开发中的线程有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI