zoukankan      html  css  js  c++  java
  • Android之Thread与Service

    Service还是Thread 

    Service用来执行长时间的后台任务,同时线程也可以执行后台任务,它们的不同是什么?

    • Service的特点

    1.默认情况下,Service是运行在主线程中,如果要执行长时间的耗时工作,应该在Service中再开一个Thread 来执行。

    2.Service的优先级高于Activity,也高于Activity所开的Thread,所有在内存不足的情况下,不会轻易杀死Service,就算是杀死了,也会在资源可用的情况下再重启被杀死的Service。实际上,Thread只是一个用来执行后台工作的工具类,Service与Thread是两码事,我们不应该讨论他们的不同,而是应该讨论在什么地方创建Thread .

    一般情况下,Thread可以在三个位置被创建,不同的位置,生命周期不同,所以我们应该根据该Thread的目标生命周期来决定是在Service中还是Activity中创建Thread.

    • Thread在何处创建

    1.在Activity中创建 

    这种情况下,在onCreate时创建,在onDestroy中销毁,否则Activity finish后,Thread还在后台运行。这种情况适合完成一些依赖于Activity本身有关的任务,如定时更新一下Activity的控件状态等。

    2.在Application中创建 

    这里会自定义Application类,在onCreate方法中创建Thread,在onTerminate中销毁Thread,否则整个应用退出了,线程还在后台运行着。这种情况适合用来执行一些application级的任务,如在后台定时查看网络情况 等。

    以上两种情况,Thread的生命周期都不应该超过整个Application的生命周期,APP退出后,Thread也应该结束,这样才不会出现MemoryLeak等。

    如果希望在整个APP都退出后,依然可以运行该Thread,就应该将这个Thread放到Service中。

    3.在Service中创建

    只要Service不退出 ,Thread就不会结束,一般在Service的onCreate中创建,在onDestroy中销毁。

    适合于执行一些独立于APP的后台任务,如在Service中保持与服务器的长连接。

  • 相关阅读:
    cnpm镜像安装
    wxParse解析html
    C++回调函数
    QT源码分析:QTcpServer
    QT实现支持加密的Sqlite数据库引擎
    VS2013+OpenCV3.4.2编译
    Android Tcp操作
    使用Delphi开发linux应用
    QT5.10+MinGW+OpenCV3.4.2编译
    C++ ActiveX开发的问题讨论
  • 原文地址:https://www.cnblogs.com/chuiyuan/p/4782533.html
Copyright © 2011-2022 走看看