zoukankan      html  css  js  c++  java
  • 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.   
    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. }  


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

    原因是在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>  


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

     

  • 相关阅读:
    for循环
    3.9 作业
    while循环
    深浅拷贝
    条件与判断
    可变与不可变
    与用户交互与运算符
    垃圾回收机制
    【AC自动机】文本生成器
    【AC自动机】最短母串
  • 原文地址:https://www.cnblogs.com/x_wukong/p/8855900.html
Copyright © 2011-2022 走看看