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

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



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


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


public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        System.out.println("MainActivity  OnCreate()....");
        
        System.out.println("准备开启服务");
        Intent intent = new Intent(MainActivity.this,TestService.class);  
        startService(intent);  
    }
}



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





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


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

代码:

 <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.NoDisplay"
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <service android:name="com.example.backgroundservice.TestService" >
        </service>
    </application>

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

 <!-- Default theme for activities that don't actually display a UI; that
         is, they finish themselves before being resumed.  -->
    <style name="Theme.NoDisplay">
        <item name="android:windowBackground">@null</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowAnimationStyle">@null</item>
        <item name="android:windowDisablePreview">true</item>
        <item name="android:windowNoDisplay">true</item>
    </style>

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











  • 7
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
您好!很高兴回答您关于Android服务实战的问题。 Android服务是一种在后台执行长时间运行操作的组件。它可以在不与用户界面进行交互的情况下执行任务,如下载文件、播放音乐或接收网络请求。下面是一些关于Android服务实战的常见问题和解答: 1. 如何创建一个Android服务? 要创建一个Android服务,您需要创建一个继承自Service类的子类。在该子类中,您可以实现onCreate() 方法来进行初始化,onStartCommand() 方法来处理服务启动请求,以及onDestroy() 方法来释放资源。 2. 如何启动和停止一个服务? 您可以使用Context类中的startService() 方法来启动服务,并使用stopService() 方法来停止服务。另外,您还可以使用bindService() 方法来绑定服务,这意味着服务和调用它的组件之间会建立一个链接,以便相互通信。 3. 如何与服务进行通信? 如果您需要与服务进行交互,可以使用bindService() 方法将调用者与服务绑定在一起。这样,您就可以通过返回的IBinder对象来调用服务中的方法。 4. 如何在服务中执行耗时操作? 如果您需要在服务中执行耗时操作,最好将其放在一个单独的线程中,以防止阻塞UI线程。您可以使用Handler、AsyncTask或线程池等方式来实现。 5. 如何在前台运行一个服务? 如果您希望服务在前台运行(如播放音乐或进行下载操作),可以使用startForeground() 方法将服务提升为前台服务。这样,您就可以显示通知,并且可以更容易地保持服务后台长时间运行。 希望以上答案能对您有所帮助!如果您还有其他问题,请随时提问。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值