我们了解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 服务是在后台运行的组件,无需与用户直接交互。
默认情况下,服务在主线程中与应用程序相同的进程中运行。 在应用程序进程中运行的服务有时称为本地服务。
根据上面的定义我们可以说明显服务也是一个过程(我不确定,请让我纠正)
答案 0 :(得分:0)
让我先从声明开始 - 服务不是一个过程。这是一个没有GUI的活动
如果启动一个线程,它将与您的主活动线程并行运行。但是不保证服务始终在新线程中运行。 因此,您无法调用类似于Thread的服务。
服务不是一个单独的过程。服务对象本身并不意味着它在自己的进程中运行;除非另有说明,否则它与其所属的应用程序运行的过程相同。
服务不是线程。它不是从主线程开始工作的手段(以避免应用程序无响应错误)。
那么何时在您的应用程序中使用服务?
Context.startService()
的调用,要求系统安排服务工作,直到服务或其他人明确停止服务为止。原因 - 只要服务仍在运行,您的应用程序及其所有全局变量就不会被删除。因此,如果用户没有与您的应用程序进行交互,并且前台的某些其他应用程序需要更多内存,并且如果操作系统触发内存不足警告并且您的活动被破坏,那么当应用程序运行时,您的应用程序仍然不会完全丢失。
Context.bindService()
的调用,该调用允许与服务建立长期连接以便与服务进行交互。如何根据服务定义应用程序优先级?
已启动的服务可以使用startForeground(int,Notification)API将服务置于前台状态,系统认为该服务是用户主动了解的内容,因此在内存不足时不会成为查杀的候选者。