流程服务线程

时间:2014-12-29 09:04:38

标签: multithreading service process

我们了解Process和Thread之间的关系。

线程来自Process,我们可以说Process是一个容器而Thread是容器的一个元素。

但服务呢?

我可以说Process和Thread有相同的类型。

我们可以对服务说同样的话吗?

我发现Window Services和Android Services具有相似性,如果我们想要播放Media,那么我们必须在Windows(8)中同样获取 getSystemService(Context.AUDIO_SERVICE)来自 services.msc 的强> Windows音频(audiosrv.dll)服务,然后媒体将无法播放。

什么是服务? 的视窗 服务是一种在没有用户界面的情况下在系统后台运行的应用程序类型,类似于UNIX守护程序进程。

Android 服务是在后台运行的组件,无需与用户直接交互。

默认情况下,服务在主线程中与应用程序相同的进程中运行。 在应用程序进程中运行的服务有时称为本地服务。

根据上面的定义我们可以说明显服务也是一个过程(我不确定,请让我纠正)

1 个答案:

答案 0 :(得分:0)

让我先从声明开始 - 服务不是一个过程。这是一个没有GUI的活动

如果启动一个线程,它将与您的主活动线程并行运行。但是不保证服务始终在新线程中运行。 因此,您无法调用类似于Thread的服务。

服务不是一个单独的过程。服务对象本身并不意味着它在自己的进程中运行;除非另有说明,否则它与其所属的应用程序运行的过程相同。

服务不是线程。它不是从主线程开始工作的手段(以避免应用程序无响应错误)。

那么何时在您的应用程序中使用服务?

  1. 如果您的应用程序告诉系统它想要在后台执行的操作(即使用户没有直接与应用程序交互)。这对应于Context.startService()的调用,要求系统安排服务工作,直到服务或其他人明确停止服务为止。
  2. 原因 - 只要服务仍在运行,您的应用程序及其所有全局变量就不会被删除。因此,如果用户没有与您的应用程序进行交互,并且前台的某些其他应用程序需要更多内存,并且如果操作系统触发内存不足警告并且您的活动被破坏,那么当应用程序运行时,您的应用程序仍然不会完全丢失。

    1. 应用程序的一个工具,用于将其某些功能公开给其他应用程序。这对应于对Context.bindService()的调用,该调用允许与服务建立长期连接以便与服务进行交互。
    2. 如何根据服务定义应用程序优先级?

      1. 如果服务当前正在其onCreate(),onStartCommand()或onDestroy()方法中执行代码,那么托管进程将是一个前台进程,以确保此代码可以执行而不会被杀死。
      2. 如果服务已经启动,则其托管过程被认为不如屏幕上用户当前可见的任何进程重要,但比任何不可见的进程更重要。
      3. 如果有客户端绑定到该服务,那么该服务的托管过程永远不会比最重要的客户端重要。
      4. 已启动的服务可以使用startForeground(int,Notification)API将服务置于前台状态,系统认为该服务是用户主动了解的内容,因此在内存不足时不会成为查杀的候选者。