安卓服务(Service)的两种开启方式以及服务的生命周期

安卓服务(Service)的两种开启方式以及服务的生命周期

大家好,又见面了,我是全栈君。

安卓中服务的开启方式

一:採用start的方式开启服务

调用函数:startService(Intent)->onCreate()->onStart()/onStartCommand()->onDestroy()
特点:服务被开启后不会反复开启,仅仅会调用onStart(),服务仅仅会被停止一次。
二:採用bind的方式开发服务
调用函数:bindService(Intent…)->onCreate()->onBind()->onUnBind()->onDestroy();
特点:绑定不会调用onStart()[过时了]和onStartCommand()方法。

两种服务的差别:
start方式开发服务,一旦服务开启跟调用者就没有不论什么关系了。比方我们的服务是在Activity中调用开启的,当Activity关闭的时候,服务不会关闭。
bind方式开启服务,调用者没了。服务也会关闭,能够理解为同生共死。

对于start开启服务的方式比較简单。重点解说bind的方式。

样例:
1.布局里面设置三个button
demo截图
2.为button设置监听事件。有好几种方式。
3.处理事件。

当点击绑定的时候:

    /*绑定的创建方式 */
    Intent intent = new Intent(this, MyService.class);
    bindService(intent, conn, BIND_AUTO_CREATE);

conn是自己实现的功能类,继承自ServiceConnection。
完整代码例如以下:

public class MainActivity extends ActionBarActivity {
    private MyConn conn;
    private Call c;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);//Call相似中间人的功能。
    }
    public void bind(View v){
        conn = new MyConn();
        Intent intent = new Intent(this, MyService.class);
        bindService(intent, conn, BIND_AUTO_CREATE);
    }

    public void unbind(View v){
        unbindService(conn);
        c = null;
    }
    /* * 调用服务里的方法 */
    public void call(View v){
        c.callMethodInService();
    }

    private class MyConn implements ServiceConnection{

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            System.out.println("调用服务里面的方法");
            c = (Call) service;
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    }
}

service代码例如以下:

public class MyService extends Service {

    @Override
    public IBinder onBind(Intent intent) {
        System.out.println("服务被成功绑定了");
        return new Call();
    }

    @Override
    public void onCreate() {
        System.out.println("onCreate");
        super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        System.out.println("onstartCommand");
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        System.out.println("ondestroy");
        super.onDestroy();
    }

    public void methodInService(){
        Toast.makeText(this, "methodInService", 0).show();
    }

    public class Call extends Binder{
        public void callMethodInService(){
            methodInService();
        }
    }
}

布局文件:

<LinearLayout 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" android:orientation="vertical" tools:context="com.example.servicelife.MainActivity" >
    <Button android:onClick="bind" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="start"/>

    <Button android:onClick="unbind" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="end"/>

    <Button android:onClick="call" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="调用服务里的方法"/>


</LinearLayout>

点击下载源码

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115459.html原文链接:https://javaforall.net

(0)
上一篇 2022年2月4日 上午7:00
下一篇 2022年2月4日 上午8:00


相关推荐

  • android开发冷启动和热启动的区别,android 冷启动和热启动

    android开发冷启动和热启动的区别,android 冷启动和热启动一 什么是冷启动 热启动 冷启动 在启动应用时 系统中没有该应用的进程 这时系统会创建一个新的进程分配给该应用 热启动 在启动应用时 系统中已有该应用的进程 例 按 back 键 home 键 应用虽然会退出 但是该应用的进程还是保留在后台 二 冷启动 热启动的区别冷启动 系统没有该应用的进程 需要创建一个新的进程分配给应用 所以会先创建和初始化 Application 类 再创建和初始化 MainActi

    2026年3月19日
    2
  • 如何使用豆包进行语音识别 豆包语音识别功能详细教程

    如何使用豆包进行语音识别 豆包语音识别功能详细教程

    2026年3月12日
    3
  • rsync命令详解

    rsync命令详解参考文章 rsync 一别 的博客 CSDN 博客 rsyncRsync 命令详解 IT 黑旋风的博客 CSDN 博客 rsync 命令 1 rsync 简介 rsync 是 linux 系统下的数据镜像备份工具 使用快速增量备份工具 RemoteSync 可以远程同步 支持本地复制 或者与其他 SSH rsync 主机同步 2 rsync 特性 rsync 支持很多特性 可以镜像保存整个目录树和文件系统 可以很容易做到保持原来文件的权限 时间 软硬链接等等 无须特殊权限即可安装 快速 第一次同步时 rs

    2026年3月26日
    2
  • mysql分区表_MySQL分区分表[通俗易懂]

    mysql分区表_MySQL分区分表[通俗易懂]1、为什么要分表?数据库数据越来越大,随之而来的是单个表中数据太多。以至于查询速度变慢,而且由于表的锁机制导致应用操作也搜到严重影响,出现了数据库性能瓶颈。mysql中有一种机制是表锁定和行锁定,是为了保证数据的完整性。表锁定表示你们都不能对这张表进行操作,必须等我对表操作完才行。行锁定也一样,别的sql必须等我对这条数据操作完了,才能对这条数据进行操作。当出现这种情况时,我们可以考虑分表或分区。…

    2022年4月29日
    53
  • 虚拟村庄1

    虚拟村庄1这个游戏就是一个模拟的人工生命体 Agent 在这个小环境里面 借助玩家的帮助来生存 以上我的游戏统计截图 注意看 游戏时间 我的排名是第一哦

    2026年3月19日
    2
  • 素数圆环

    素数圆环素数圆环时间限制 1Sec 内存限制 32MB 题目描述如图所示为一个由 n 个圆圈构成的圆环 将自然数 1 2 n 放入圆圈内 并且要求任意两个相邻的圆圈内的数字之和为素数 请问给你圆圈数 你能给出放置自然数的所有正确方案吗 注意 圆圈中的数字一定是从 1 开始的 并且连续不重复 输入输入包含多组测试数据 每组输

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号