Activity和Service的交互方式

Android中Service与Activity之间的通信 Service是一种在后台运行的组件,用于执行长时间运行的操作,而Activity则是用户界面的核心组件。有时候,我们需要在Service和Activity之间进行通信,以便实现功能的协调和数据的传递。综上所述,本文介绍了在Android中实现Service与Activity之间通信的几种常见方法,包括使用Intent、回调接口和广播。我们可以在Service中定义一个回调接口,然后在Activity中实现该接口并将其传递给Service,使得Service可以通过回调方法与Activity进行交互。 阅读详情

Activity向Service通信

第一种方式:通过MyBinder方式调用Service方法
步骤
  • 继承Binder 定义中间人对象

BanZhengService

public class BanZhengService extends Service {

    //把我定义的中间人对象返回 
    @Override
    public IBinder onBind(Intent intent) {
        return new MyBinder();
    }
    //办证的方法
    public void banZheng(int money){
        if (money>1000) {
            Toast.makeText(getApplicationContext(), "我是领导 把证给你办了", 1).show();
        }else {
            Toast.makeText(getApplicationContext(), "这点钱 还想办事....", 1).show();
        }
    }
    //[1]定义中间人对象(IBinder)
    
    public class MyBinder extends Binder{
        
        public void callBanZheng(int money){
            //调用办证的方法
            banZheng(money);
        }}}
  • 重写ServiceConnection,onServiceConnected时调用中间人对象 绑定服务
    MainActivity
public class MainActivity extends Activity {

    private MyConn conn;
    private MyBinder myBinder;//我定义的中间人对象
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        Intent intent = new Intent(this,BanZhengService.class);
        //连接服务 
        conn = new MyConn();
        bindService(intent, conn, BIND_AUTO_CREATE);
        }
    //点击按钮调用服务里面办证的方法
    public void click(View v) {
        
        myBinder.callBanZheng(10000000);
    }
    
    //监视服务的状态
    private class MyConn implements ServiceConnection{

        //当服务连接成功调用
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            //获取中间人对象
            myBinder = (MyBinder) service;
        }
        //失去连接
        @Override
        public void onServiceDisconnected(ComponentName name) {
            
        }}
    @Override
    protected void onDestroy() {
        //当activity 销毁的时候 解绑服务 
        unbindService(conn);
        super.onDestroy();
    }}

第二种方式:通过接口Iservice调用Service方法

使用借口调用service和直接调用其实本质都是一样的,只不过多了借口一个步骤,

即实现步骤
  • 1.继承Binder 定义中间人对象
  • 2.定义接口
public interface Iservice {

    //把领导想暴露的方法都定义在接口里
    public void callBanZheng(int money);
//  public void callPlayMaJiang();
  • 3.重写ServiceConnection,onServiceConnected时调用中间人对象,强转为接口(myBinder = (Iservice) service;) 绑定服务

这里就写一下不同的地方,其他都和上面的第一种一样
MainActivity

    //监视服务的状态
    private class MyConn implements ServiceConnection{
        //当服务连接成功调用
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            //获取中间人对象
            myBinder = (Iservice) service;
        }
        //失去连接
        @Override
        public void onServiceDisconnected(ComponentName name) {
            
        }
    }
    @Override
    protected void onDestroy() {
        //当activity 销毁的时候 解绑服务 
        unbindService(conn);
        super.onDestroy();
    }
}

在开发过程中,经常会遇到Activity和Service进行相互通信、交换数据的需要,最常见的比如音乐播放器,使用Service在后台进行音乐播放,前台使用Activity显示界面,点击前台控件后需要告知Service,控制音乐的播放、暂停、切换下一首等,后台Service再将数据传给Activity来改变界面显示

Activity和Service的交互方式主要有以下几种

  • 通过广播进行交互

  • 通过共享文件

  • Messenger

  • AIDL

下面分别使用几种交互方式来实现一个计时器的程序,程序界面只有一个Button,Button上显示一个数字,点击Button后开始计时,每隔1秒,Button上数据加1,使用Service来实现计时的功能

布局文件很简单

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/start"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</RelativeLayout>

1、通过广播交互

在Activity中点击Button后启动Service

public void onClick(View v) {
        Intent intent = new Intent(this, CounterService.class);
        intent.putExtra("counter", counter); //counter用来计数
        startService(intent);
    }

CounterService.java

public class CounterService extends Service {

    int counter;

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // TODO Auto-generated method stub
        counter = intent.getIntExtra("counter", 0);
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
                Intent counterIntent = new Intent();
                counterIntent.putExtra("counter", counter);
                counterIntent.setAction("com.example.counter.COUNTER_ACTION");
                sendBroadcast(counterIntent);
                counter++;
            }
        }, 0, 1000);
        return START_STICKY;
    }
}

在Service的onStartCommand()中启动一个定时器,每隔1秒钟counter计数加1,通过广播发送将counter发送出去,在Activity中收到广播后取出counter,将counter设置到Button上

广播接收器,定义在Activity中

class CounterReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            counter = intent.getIntExtra("counter", 0);
            start.setText(counter + "");
        }
    }

运行程序,点击按钮开始计时

在这里插入图片描述

在程序运行过程遇到一个问题,在这里说明一下,广播类是在Activity里定义的,是Activity的内部类,这个内部类在使用静态注册的时候,会发生程序运行崩溃,原因是内部广播类如果使用静态注册,必须是静态内部类,但是如果是静态内部类,只能访问外部类的静态成员变量,所以内部广播类推荐使用动态注册方式,而且这类广播一般只在程序内部使用,没有必须在进程结束以后继续接收广播

通过广播实现Activity和Service的交互简单容易实现,缺点是发送不广播受系统制约,系统会优先发送系统级的广播,自定义的广播接收器可能会有延迟,在广播里也不能有耗时操作,否则会导致程序无响应

2、通过共享文件

共享文件就是通过读写同一个文件来进行通信,使用这种方式通信时,同一时间只能一方写,一方读,不能两方同时写,这里使用SharedPreferences来实现Activity和Service的交互

客户端点击Button启动Service

public void onClick(View v) {
        Intent intent = new Intent(this, CounterService.class);
        intent.putExtra("counter", counter); //counter用来计数
        startService(intent);
    }

CounterService.java

public class CounterService extends Service {

    int counter;
    SharedPreferences sharedPreferences;


    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // TODO Auto-generated method stub
        counter = intent.getIntExtra("counter", 0);
        sharedPreferences = getSharedPreferences("counter_preferences", Context.MODE_PRIVATE);
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
                sharedPreferences.edit().putInt("counter", counter).commit();
                counter++;
            }
        }, 0, 1000);
        return START_STICKY;
    }

}

在Service中同样启动一个定时器,每秒将计数加1,然后写入到SharedPreferences中

在Activity中也需要启动一个定时任务,从SharedPreferences中读取计数

sharedPreferences = getSharedPreferences("counter", Context.MODE_PRIVATE);
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
                counter = sharedPreferences.getInt("counter", 0);
                handler.sendEmptyMessage(0x123);
            }
        }, 0, 1000);

在Activity的onCreate()中启动定时器,每隔1秒读取一次数据,由于在子线程中是无法更新UI的,所以通过handler发送一条消息到主线程中更新

Handler handler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            if(msg.what == 0x123) {
                start.setText(counter + "");
            }
        };
    };

程序运行结果和上图相同

使用SharedPreferences进行数据共享对文件格式没有要求,只要读写双方约定好数据格式即可。但是也有局限性,在面对高并发的读写时,这种方式就变得不可靠,很可能会导致读写的数据不一致,所以不建议使用这种方式来进行通信

3、Messenger

Messenger的意思可以译为信使,通过它可以在不同进程间传递Meesage对象,Messenger是一种轻量级的IPC方案,底层是用AIDL实现的

使用Messenger在Activity和Service之间进行数据传输的步骤如下;

1、在Service端创建信使对象

创建Messenger需要传入一个Handler对象,所以首先要新建一个Handler,利用Handler来创建信使

@Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        mMessenger = new Messenger(handler);
    }

2、Service端的onBind()方法使用mMessenger.getBinder()返回一个binder对象

@Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return mMessenger.getBinder();
    }

3、客户端绑定到Service,在onServiceConnected()方法中使用Service返回的IBinder对象创建Messenger对象,通过这个Messenger对象就可以向Service发送消息了。

ServiceConnection connection = new ServiceConnection() {
        public void onServiceConnected(ComponentName name, android.os.IBinder service) {
            rMessenger = new Messenger(service);
        };
        public void onServiceDisconnected(ComponentName name) {

        };
    };

这样只是实现了客户端向Service发送消息,如果需要Service可以将相应客户端,同样的需要在客户端使用Handler来创建Messenger对象,通过Message将这个Messenger传到Service中,Service获取到客户端的Messenger对象后,也可以向客户端发送消息。

通过Messenger来实现上面的功能

Service端的代码CounterService.java

public class CounterService extends Service {

    int counter;
    Messenger mMessenger, cMessenger; //Service的信使对象和客户端的信使对象

    Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            cMessenger = msg.replyTo; //获取Message中的客户端信使对象
            counter = msg.arg1; //获取Message中的计数
            new Timer().schedule(new TimerTask() {
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    Message message = Message.obtain();
                    message.arg1 = counter;
                    try {
                        cMessenger.send(message); //通过客户端的信使对象向客户端发送消息,消息中保存counter
                    } catch (RemoteException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    counter++;
                }
            }, 0, 1000);
        };
    };

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return mMessenger.getBinder();
    }

    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        mMessenger = new Messenger(handler); //初始化Service信使
    }

}

客户端代码MainActivity.java

public class MainActivity extends Activity {

    Button start;
    int counter = 0;
    Messenger rMessenger, mMessenger; //远程Service端的信使对象和客户端本地的信使对象

    Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            counter = msg.arg1; //获取Service消息中的计数
            start.setText(counter + "");
        };
    };

    ServiceConnection connection = new ServiceConnection() {
        public void onServiceConnected(ComponentName name, IBinder service) {
            rMessenger = new Messenger(service); //使用Service返回的IBinder对象初始化Service端信使对象
            mMessenger = new Messenger(handler); //初始化本地客户端信使对象
            Message message = Message.obtain();
            message.replyTo = mMessenger; //将客户端的信使对象保存到message中,通过Service端的信使对象发送给Service
            message.arg1 = counter;
            try {
                rMessenger.send(message);
            } catch (RemoteException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        };
        public void onServiceDisconnected(ComponentName name) {
            rMessenger = null;
        };
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        start = (Button)findViewById(R.id.start);
        start.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(MainActivity.this, CounterService.class);
                bindService(intent, connection, BIND_AUTO_CREATE);
            }
        });
    }

}

代码中的注释很详细,点击按钮后,客户端绑定到Service,通过Service中返回的IBinder对象创建Service端的信使对象,然后将客户端本地的信使对象和计数变量通过Message发送到Service中。

在Service中获取到客户端发送过来的消息后,取出信息中的Messenger,这样Service中就有了客户端的信使对象,就可以向客户端发送消息,这样就实现了双向通信。

程序运行效果和前面两个程序一样

4、使用AIDL进行通信

AIDL属于Android的IPC机制,常用于跨进程通信,主要实现原理基于底层Binder机制,使用AIDL Service实现进程间通信在另一篇博客http://blog.youkuaiyun.com/zh175578809/article/details/71915238中有详细介绍,这里就不再阐述

浅谈Android Activity与Service的交互方式 实现更新下载进度的功能 1. 通过广播交互 Server端将目前的下载进度,通过广播的方式发送出来,Client端注册此广播的监听器,当获取到该广播后,将广播中当前的下载进度解析出来并更新到界面上。 优缺点分析: 通过广播的方式实现Activity与Service的交互操作简单且容易实现,可以胜任简单级的应用。但缺点也十分明显,发送广播受到系统制约。系统会优先发送系统级广播,在某些特定的情况下,我们自定义的广播可能会延迟。同时在广播接收器中不能处理长耗时操作,否则系统会出现ANR即应用程序无响应 2. 共享文件交互 这里提到的共享文件指的是Activity和Service使用同一个文件来达到 立即下载

相关推荐

Gemini 3.1 Flash本地部署实操:Ollama+Open WebUI零门槛运行指南

大型语言模型(LLM)本地运行是指将模型权重下载至本地设备,通过推理引擎完成离线推理的过程;其核心原理依赖量化压缩(如GGUF格式)与轻量级运行时(如Ollama)实现CPU/GPU高效加载;技术价值在于低延迟响应、数据隐私可控及免网络依赖;典型应用场景包括办公提效(邮件/周报生成)、学生学习辅助、产品原型验证等边缘AI任务;本文聚焦Gemini 3.1 Flash这一面向消费级硬件优化的轻量模型变体,结合Ollama模型管理与Open WebUI图形界面,提供从环境准备、模型拉取到流式对话的完整新手实操路

weixin_32238157的博客 493

003_Activity 与 Service 的通信

#1 Activity 通过Intent传递数据给Service 一、 Activity启动Service Intentintent=newIntent(mContext,MyService.class); Bundlebundle=newBundle(); bundle.putString("zh

baopengjian的专栏 1629

AI 生成 ECU 功能测试用例

本文分享了AI辅助汽车电子测试的实战经验。作者以某车企车身控制器(BCM)项目为例,对比了传统测试用例编写方式(需100小时)与AI辅助方式(仅3个工作日)的效率差异,实现76%的效率提升。文章详细展示了从需求文档生成测试用例的全过程,包括需求文档示例、AI提示词模板和AI生成的完整测试用例表格(涵盖正常功能、边界条件、异常场景等测试类型)。通过具体案例说明如何利用AI快速生成初稿后人工审核优化的方法,为ECU测试工程师提供了可复用的效率提升方案。

小明的博客 881

安卓开发中,service和activity通信方式简述

Intent。

qq_42544728的博客 2972

TC264摄像头循迹进阶:八邻域与逐行遍历在复杂赛道边界提取中的实战对比

本文对比分析了TC264摄像头循迹中八邻域法与逐行遍历法在复杂赛道边界提取中的实战表现。八邻域法在边界连续性方面表现优异,适合处理环岛等复杂元素;逐行遍历法则在计算效率和岔路口识别上更具优势。文章提供了详细的代码实现和优化策略,帮助智能车竞赛选手根据赛道特点选择最佳算法方案。

rainy的博客 937

使用DeepSeek、MCP和AKShare实现智能金融问答系统技术方案

DeepSeek是由深度求索公司开发的大规模语言模型,最新版本DeepSeek-V3采用混合专家(MoE)架构,拥有671B参数,激活37B参数,在多项基准测试中表现优异3。要使用DeepSeek的API服务:访问DeepSeek平台注册账号获取API Key(形如AKShare是基于Python的金融数据接口库,提供股票、基金、期货、宏观经济等领域的海量数据。主要特点包括:免费开源,数据源丰富支持多种数据格式(DataFrame/JSON)持续更新维护安装命令。

Kin 3173

Activity和Service交互方式探讨

目录 需求定义 方式一:广播(Broadcast) 方式二:bindService-接口回调 方式三:startService和bindService混合双打 方式四:单例传值 方式五:配合系统级别服务 其它方式 需求定义 假设一个设备具备装备了湿度传感器,可通过监测真实环境的湿度值来工作(如市面上的除湿设备),用户要求:除湿工作全自动化,无需人工干预,除非断电关机,否则永远在后台运行;有一个用户界面,打开可以查看当前环境的湿度值以及设备的工作状态(是否在进行除湿工作)。针对这些需求,得到

visionliao的专栏 619

STM32+4G模块+MQTT协议:从零构建稳定可靠的物联网通讯链路

本文详细介绍了如何利用STM32、4G模块和MQTT协议构建稳定可靠的物联网通讯链路。通过硬件选型、AT指令配置和MQTT连接实战,帮助开发者实现低功耗、高可靠性的数据传输,特别适合户外和移动场景应用。

weixin_29191081的博客 334

andorid service activity交互方式

android service与activity交互的方试 1:android通过Handler与activity交互 这个实现起来比较简单,只需要把handler传递给service然后通过handler的handleMessage来更新界面就可以了,没什么难点。 我们来看看service里面的代码。 public class SingleService extends Service

code change the world 2792

Mac本地部署OpenClaw:从零搭建企业级知识库AI助手

大语言模型(LLM)作为当前人工智能的核心技术,通过其强大的自然语言理解和生成能力,正在深刻改变信息交互方式。其原理是基于海量数据训练的深度神经网络,能够根据上下文预测并生成连贯文本。这一技术的核心价值在于,它能够作为智能中枢,理解和执行复杂指令,从而将通用AI能力转化为解决特定业务问题的生产力。在工程实践中,通过AI Agent框架(如OpenClaw)将LLM与外部工具和知识系统连接,是实现其价值的关键。这涉及到**本地部署**与**私有化**部署,以确保数据安全与成本可控。具体应用场景包括企业知识库问

weixin_33402252的博客 377

IEEE S&P 2026 大模型安全论文整理

本文梳理了 IEEE S&P 2026(第47届 IEEE 安全与隐私研讨会)中与 LLM Safety 相关的论文,涵盖大模型越狱攻击、防御与对齐、隐私保护、RAG 安全、多模态大模型安全、智能体安全、图-LLM 安全、工具链安全及生成式 AI 安全与隐私等方向。

CSPhD-winston的博客 1334

Service和Activity通信

在上面我们高高兴兴的启动了Service了,但是细心的你可能发现了,貌似我们仅仅只是启动了而已,Activity跟Service并没有多少"交流",下面我们就让Activity跟Service交流一下。 public class MyService extends Service { ​ public static final String TAG = "MyService"; ​ private MyBinder mBinder = new MyBinder(); ​ @Overr

weixin_44548736的博客 351

Matlab并行运算

今天搞了一下matlab的并行计算,效果好的出乎我的意料。 本来CPU就是双核,不过以前一直注重算法,没注意并行计算的问题。今天为了在8核的dell服务器上跑程序才专门看了一下。本身写的程序就很容易实现并行化,因为beamline之间并没有考虑相互作用。等于可以拆成n个线程并行,要是有550核的话,估计1ms就算完了。。。 先转下网上找到的资料。 一、Matlab并行计算原理梗概 Matl

wenyusuran的专栏 1万+

Android中程序与Service交互的方式——交互方式

Android中程序与Service交互的方式——交互方式

qq_43741569的博客 499

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Activity与Service的那些事

* 虽然服务是在活动中启动的,但是当在活动中startService()后,好像就变得不那么容易控制我们的服务了,我们在活动里调用了startService()方法来启动MyService这个服务,然后MyService的onCreate()和onStartCommand()方法就会得到执行。其中onCreate()方法会在服务创建的时候调用,onStartCommand()方法会在每次服务启动的时候调用,onDestroy()方法会在服务销毁的时候调用。那么前2个方法有什么区别了?

dhfdhfdjcxcx的博客 796

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Android Activity与Service的交互方式

1. 通过广播交互 Server端将目前的下载进度,通过广播的方式发送出来,Client端注册此广播的监听器,当获取到该广播后,将广播中当前的下载进度解析出来并更新到界面上。优缺点分析:    通过广播的方式实现Activity与Service的交互操作简单且容易实现,可以胜任简单级的应用。但缺点也十分明显,发送广播受到系统制约。系统会优先发送系统级广播,在某些特定的情况下,我们自定义的广播可能会...

YECrazy的博客 2606

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

activity、 intent 、intent filter、service、Broadcast、BroadcaseReceiver解释

Activity Android中,Activity是所有程序的根本,所有程序的流程都运行在Activity之中,Activity具有自己的生命周期(由系统控制生命周期,程序无法改变,但可以用onSaveInstanceState保存其状态)。 对于Activity,关键是其生命周期的把握(如那张经典的生命周期图=.=),其次就是状态的保存和恢复(onSaveInstanceState onR

有望得到的要努力,无望得到的不介意,则无论输赢姿势都会好看! 526

android activity和service的交互介绍

Android开发中,作为4大组件的service在开发中经常会使用到。很多时候,我们的activity和service之间需要进行相应的交互,activity需要调用service里面的方法实现某些功能,service需要调用activity的方法,实现界面更新等的交互。 实现2者之间相互交互的主要方式是:service中有个类部类继承Binder,然后提供一个公有方法,返回当前ser

tasty 515

android service交互,Android Activity与Service的交互方式

参考:http://blog.youkuaiyun.com/gebitan505/article/details/18151203实现更新下载进度的功能1. 通过广播交互Server端将目前的下载进度,通过广播的方式发送出来,Client端注册此广播的监听器,当获取到该广播后,将广播中当前的下载进度解析出来并更新到界面上。优缺点分析:通过广播的方式实现Activity与Service的交互操作简单且容易实现...

weixin_33190667的博客 1168

android 获取service 实例化,在Activity中,如何获取service对象?a.可以通过直接实例化得到。b.可以通过绑定得到。c.通过star - 众答网问答...

相关题目与解析service中如何实现更改Activity界面元素()。A.通过把当前activity对象传递给service对象B.通过关于Android的IPC机制描述正确的是A、Android中的IPC机制是为了让Activity和Service之间可以随下面属于View的子类的是()A、ViewGroupB、TextViewC、ActivityD、Service下面哪个不是安卓四大组件之一...

weixin_26808023的博客 1245

23 个安卓重难点突破,带你吃透 Service 知识点「长达 1W+ 字」(1)

是Service的子类,比普通的Service增加了额外的功能。我们常用的ServiceService不会专门启动一条单独的进程,Service与它所在应用位于同一个进程中Service也不是专门一条新线程,因此不应该在Service中直接处理耗时的任务其实就是我们自己通过接口的实现来达到Activity与Service交互的目的,我们通过在Activity和Service之间架设一座桥樑,从而达到数据交互的目的,而这种实现方式和AIDL非常类似自定义一个接口,该接口中有一个获取当前下载进度的空方法。

2401_84544495的博客 908

Andriod Activity和Service同一线程的情况和不在同一线程的情况

一般来说:同一个包内的activity和service,如果service没有设定属性android:process=":remote"的话,service会和activity跑在同一个进程中,由于一个进程只有一个UI线程,所以,service和acitivity就是在同一个线程里面的。 android:process=":remote"值得注意他的用法!!!如果Activity

WALLEZhe的博客 657

Activity总结和补充

目录: 导图 1作用: service 是服务(类似守护进程).它不需要界面,在后台执行耗时的操作.比如:download 文件,数据库操作. Service的执行与后台线程方式极大不同,Service只是一种代码逻辑的抽象,实际上它还是运行在Activity同一线程上下文环境 activity and service 关系? 它们运行在同一个进程,如果结束当前activity所在进程,service也同样会结束,因此他们两个是运行在同一个进程中的. activity是运行在主线程中的 ser.

fdsafwagdagadg6576的专栏 423
上一篇: 面试题积累
下一篇: null.equals引起的空指针
金陵张大炮
博客等级 码龄9年 30粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值