Android Service 线程

Service是Android组件,用于执行无界面任务,而线程是操作系统或Java概念,用于执行任务。Service默认在主线程运行,需开启子线程处理耗时操作。Service优先级高于后台Activity和Thread,系统在资源紧张时会优先考虑其他组件。在Service中创建子线程更灵活,不受Activity生命周期影响。前台Service通过Notification显示,远程Service则需使用AIDL进行跨进程通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      Service 与线程的区别?

               1.首先Service是Android系统提供的组件,用于执行一些“无界面”的任务;线程则是操作系统或者Java语言的概念,可以开启一个线程用于执行一系列任务,两者不在一 个层面。

               2.在Android中,每一个App至少对应一个进程,在该进程中有且必有一个线程是主线程,也称UI线程,由于UI线程涉及到App的运行界面绘制,所以不允许堵塞,在一个 App进程中,允许开启子线程完成一些耗时操作。

               3.Service默认运行在主线程也就是UI线程,所以Service默认情况下也是不能做耗时操作的,当有需要在Service中做耗时操作时,可以在Service中开启子线程完成。

     Service 与线程如何选择?

               Service的优先级高于后台挂起的Activity,当然,也高于Activity所创建的Thread,因此,系统可能在内存不足的时候优先杀死后台的Activity或者Thread,而不会轻易杀 死Service组件,即使被迫杀死Service,也会在资源可用时重启被杀死的Service。

               线程可以在Activity  Service 和Application中开启,并且在跟随这三者的生命周期销毁线程以防止内存泄漏,一般情况下生命周期Activity < Service < = Application。          所以可以根据运行任务的需要在Activity  Service 和Application中开启子线程以执行任务。

               在Service中创建子线程会更灵活,不用care Activity 是否被销毁,别的activity也可以跟Service灵活绑定,执行相应的任务。


        定义一个Service

    

public class MyService extends Service {  
  
    public static final String TAG = "MyService";  
  
    private MyBinder mBinder = new MyBinder();  
  
    @Override  
    public void onCreate() {  
        super.onCreate();  
        Log.d(TAG, "onCreate() executed");  
    }  
  
    @Override  
    public int onStartCommand(Intent intent, int flags, int startId) {  
        Log.d(TAG, &#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值