首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >androidvncserver下载_android bindservice

androidvncserver下载_android bindservice

作者头像
全栈程序员站长
发布2022-09-28 10:43:47
发布2022-09-28 10:43:47
38900
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君

关于安卓BindService 绑定问题

BindService 主要用于当用户想要将活动activity与service进行绑定,当activity结束时(调用者)service也跟着一起结束了;而startService()只能用来启动服务,当服务启动后,就与前台活动没有了关系;

当我们要从service外部获得service中的方法内容时,我们必须要Ibinder返回的service对象才能操作;所以我们必须利用bindservice的方式去绑定服务获取binder对象,利用binder的方式去获取service的方法内容;

使用bindservice的具体过程如下:

1)创建意图:Intent intent = new Intent(MainActivity.this,BindService.class);

2)创建bindservice对象:bindService(intent,conn,BIND_AUTO_CREATE);

3)创建内部类MyBinder、新建mybinder对象:

代码语言:javascript
代码运行次数:0
运行
复制
private  MyBinder myBinder = new MyBinder();
    class MyBinder extends Binder{
        public BindService getService(){
            return BindService.this;
        }
    }

4)onBind()返回mybinder对象:

代码语言:javascript
代码运行次数:0
运行
复制
public IBinder onBind(Intent intent) {
        return myBinder;
    }

5)通过serviceconnection获取Binder对象进一步来获取service对象,最后调用service中的方法:

代码语言:javascript
代码运行次数:0
运行
复制
ServiceConnection conn = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            BindService.MyBinder binder = (BindService.MyBinder)service;
            BindService bindService = binder.getService();
            bindService.print();
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    };

示例代码:

MainActivity

代码语言:javascript
代码运行次数:0
运行
复制
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initEvent();
    }
    ServiceConnection conn = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            BindService.MyBinder binder = (BindService.MyBinder)service;
            BindService bindService = binder.getService();
            bindService.print();
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    };

    private void initEvent() {
        findViewById(R.id.button4).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,BindService.class);
                bindService(intent,conn,BIND_AUTO_CREATE);
            }
        });
        findViewById(R.id.button5).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                unbindService(conn);
            }
        });
    }
}

BindService

代码语言:javascript
代码运行次数:0
运行
复制
public class BindService extends Service {
    
    public void print(){
        Log.d(TAG, "print: BindService");
    }
    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG, "onCreate");
    }

    @Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
        Log.d(TAG, "onStart");
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(TAG, "onStartCommand");
        return super.onStartCommand(intent, flags, startId);
        
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy");
    }

    @Override
    public boolean onUnbind(Intent intent) {
        Log.d(TAG, "onUnbind:");
        return super.onUnbind(intent);
    }

    @Override
    public void onRebind(Intent intent) {
        Log.d(TAG, "onRebind");
        super.onRebind(intent);
    }

    private  MyBinder myBinder = new MyBinder();
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return myBinder;
    }
    class MyBinder extends Binder{
        public BindService getService(){
            return BindService.this;
        }
    }
}

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月2日 下,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档