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

仰天大笑出门去,我辈岂是蓬蒿人。这篇文章主要讲述Android 创建单独的服务运行在后台(无界面)相关的知识,希望能为你提供帮助。
转自:https://blog.csdn.net/a704225995/article/details/56481934
 
今天项目有个需求是,开启一个服务单独运行在后台,而且还不能有界面,在度娘搜索了一圈也没发现可以完美解决的方法,然后自己尝试解决的方法,开始的思路是,把界面干掉,也就是activity,然后将开启Service的操作放在Application中,结果运行程序,在控制台报错了。

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

文章图片

 
因为我把androidManifest.xml中的主Activity的配置给干掉了,而程序找不到应用的入口,所有就无法打开应用,这种方法行不通。
 
【Android 创建单独的服务运行在后台(无界面)】然后我就想,把Activity保留,但是我不给它 setContentView(......); 也就是不给他设置布局文件,
 
 
[java]  view plain  copy  
  1. public  class  MainActivity  extends  Activity  {   
  2.    
  3.         @Override   
  4.         protected  void  onCreate(Bundle  savedInstanceState)  {   
  5.                 super.onCreate(savedInstanceState);    
  6.                    
  7.                 System.out.println("MainActivity    OnCreate()....");    
  8.                    
  9.                 System.out.println("准备开启服务");    
  10.                 Intent  intent  =  new  Intent(MainActivity.this,TestService.class);        
  11.                 startService(intent);        
  12.         }   
  13. }   
 

运行程序,程序打开了,服务也运行了,但是有个问题就是,界面也出来了,为什么呢?
 
Android 创建单独的服务运行在后台(无界面)

文章图片

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

文章图片

 
原因是在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.    
  14.                               < category  android:name="android.intent.category.LAUNCHER"  />    
  15.                       < /intent-filter>    
  16.               < /activity>    
  17.    
  18.               < service  android:name="com.example.backgroundservice.TestService"  >    
  19.               < /service>    
  20.       < /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>    

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

    推荐阅读