Android 创建单独的服务运行在后台(无界面)

转自:https://blog.csdn.net/a704225995/article/details/56481934

今天项目有个需求是,开启一个服务单独运行在后台,而且还不能有界面,在度娘搜索了一圈也没发现可以完美解决的方法,然后自己尝试解决的方法,开始的思路是,把界面干掉,也就是activity,然后将开启Service的操作放在Application中,结果运行程序,在控制台报错了。

因为我把AndroidManifest.xml中的主Activity的配置给干掉了,而程序找不到应用的入口,所有就无法打开应用,这种方法行不通。

然后我就想,把Activity保留,但是我不给它 setContentView(......);也就是不给他设置布局文件,

[java] view plain copy

  1. public class MainActivity extends Activity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. System.out.println("MainActivity  OnCreate()....");
  6. System.out.println("准备开启服务");
  7. Intent intent = new Intent(MainActivity.this,TestService.class);
  8. startService(intent);
  9. }
  10. }

运行程序,程序打开了,服务也运行了,但是有个问题就是,界面也出来了,为什么呢?

原因是在AndroidManifest.xml中Application节点中这个这行代码android:theme="@style/AppTheme",既然是主题的问题导致界面的出现,那么是想android是否提供了不显示界面的主题?查找后问题终于解决了,解决方法:在清单文件中,主activity的配置中添加这行代码

android:theme="@android:style/Theme.NoDisplay"

代码:

[java] view plain copy

  1. <application
  2. android:allowBackup="true"
  3. android:icon="@drawable/ic_launcher"
  4. android:label="@string/app_name"
  5. android:theme="@style/AppTheme" >
  6. <activity
  7. android:name=".MainActivity"
  8. android:label="@string/app_name"
  9. android:theme="@android:style/Theme.NoDisplay"
  10. >
  11. <intent-filter>
  12. <action android:name="android.intent.action.MAIN" />
  13. <category android:name="android.intent.category.LAUNCHER" />
  14. </intent-filter>
  15. </activity>
  16. <service android:name="com.example.backgroundservice.TestService" >
  17. </service>
  18. </application>

我们还可以Ctrl+左键点进去看看这个主题是怎么写的:

[java] view plain copy

  1. <!-- Default theme for activities that don‘t actually display a UI; that
  2. is, they finish themselves before being resumed.  -->
  3. <style name="Theme.NoDisplay">
  4. <item name="android:windowBackground">@null</item>
  5. <item name="android:windowContentOverlay">@null</item>
  6. <item name="android:windowIsTranslucent">true</item>
  7. <item name="android:windowAnimationStyle">@null</item>
  8. <item name="android:windowDisablePreview">true</item>
  9. <item name="android:windowNoDisplay">true</item>
  10. </style>

运行程序,服务开启了,界面也不显示,完美解决了后台启动服务的进程。

原文地址:https://www.cnblogs.com/x_wukong/p/8855900.html

时间: 2024-08-30 15:16:56

Android 创建单独的服务运行在后台(无界面)的相关文章

[android] 采用服务执行长期后台的操作

服务:在后台长期运行的没有界面的组件 新建一个类PhoneService类,继承系统的Service类 清单文件中 进行配置 新建一个节点<service>,设置名称android:name=”.PhoneService” 类里面有几个重要方法 onCreate()方法,服务被创建的时候调用 onDestory()方法,服务被销毁的时候调用 开启服务 获取intent对象,new Intent(this,PhoneService.class),参数:上下文,字节码 调用上下文对象的startS

Android 四大组件 Service 服务

1.Service简介 按照使用范围分类: 类别 优点 缺点 区别 应用 本地服务 Local  Service 本地服务在一定程度上节约了资源,另外本地服务因为是在同一进程,因此不需要IPC,也不需要AIDL.相应bindService会方便很多. 主进程被Kill后,服务便会终止. 本地服务依附在主进程上,而不是独立的进程,用于应用程序内部 . 音乐播放服务 远程服务 Remote Service 对应进程名格式为所在包名加上指定的android:process字符串.由于是独立的进程,因此

Xamarin.Android其他类型的服务

一.前言 前面我们已经学了关于服务的很多知识,但是对于真实的开发那些远远不够,通过这节我们将学习其他类型的服务,比如前台服务.IntentService和消息服务.下面我们开始进入正题. 二.前台服务 顾名思义,就是拥有前台的优先等级.当然服务还是不可见的.因为前面我们介绍过Android系统会在低内存的情况下将一些长时间不用的应用关闭,如果还是不够,那么就会通过关闭服务服务来达到目的,然而对于某些应用而言,这样将会影响用户的正常使用.比如听音乐,我们基本上都会打开应用选择歌曲后将应用置为后台.

android关键组件service服务(一)

一. Service简介 Service是android 系统中的四大组件之一(Activity.Service.BroadcastReceiver.ContentProvider),它跟Activity的级别差不多,但不能自己运行只能后台运行,并且可以和其他组件进行交互.service可以在很多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务总是藏在后台的. Serv

杂谈——Android从启动到程序运行发生的事情

转载请注明出处 博客地址:http://blog.csdn.net/JonsTank2013/article/details/51118563 作者:李中权 前言 好久没有写博客了,瞬间感觉好多学了的东西不进行一个自我的总结与消化总归变不成自己的.通过博客可能还可以找到一些当初在学习的时候没有想到的问题.想了半天,从大二上学期自学Android以来还没有对Android从启动到程序运行期间进行一个完整的归纳,刚好最近又学到了一些新东西,那就以这篇博客为媒介,总结一下从Android启动到程序运行

Android从启动到程序运行整个过程的整理

1Android是基于Linux的一个操作系统,它可以分为五层,下面是它的层次架构图,可以记一下,因为后面应该会总结到SystemServer这些Application Framework层的东西 Android的五层架构从上到下依次是:应用层,应用框架层,库层,运行时层,Linux内核层. 而在Linux中,它的启动可以归为一下几个流程: Boot Loader——>初始化内核——>...... 当初始化内核之后,就会启动一个相当重要的祖先进程,也就是init进程,在Linux中所有的进程都

Android开发-API指南-服务

Service 英文原文:http://developer.android.com/guide/components/services.html 采集(更新)日期:2014-12-23 原博客:http://blog.sina.com.cn/s/blog_48d49130010102pn.html 在本文中 概述 在manifest中声明服务 创建一个started服务 扩展IntentService类 扩展Service类 启动一个服务 终止一个服务 创建一个bound服务 向用户发送通知 在

supervisor工具实现自动化docker服务运行

Supervisor工具实现自动化docker服务运行 一.使用 Supervisor 来管理进程 Docker 容器在启动的时候开启单个进程,比如,一个 ssh 或者 apache 的 daemon 服务.但我们经常需要在一个机器上开启多个服务,这可以有很多方法,最简单的就是把多个启动命令放到一个启动脚本里面,启动的时候直接启动这个脚本. 例如:docker  run  –d  镜像  /run.sh 另外就是安装进程管理工具. 本节将使用进程管理工具 supervisor 来管理容器中的多个

android基础知识之服务

##01_start开启服务的生命周期(重点) * 服务的特点:         服务被创建时调用onCreate.onStartCommand:           服务只能被创建一次,可以开启多次onStartCommand:           服务只能被停止一次onDestroy:         没有onPause.onStop.onResume.onRestart方法,因为service没有界面,长期运行在后台. * 生命周期的方法:         onCreate:服务被创建的时