zoukankan      html  css  js  c++  java
  • android_aidl

          好久未更新博客了。人都是这样,刚开始对某一样东东冲劲十足,时间一长,很难坚持下去了,我这博客也是。所以我要打破成规,继续更新。

          本次博客谈谈adil的用法。aidl的全称叫什么来着忘了,不过不要紧,重点不是叫啥名,而是要领会这玩意儿是做啥的。扯远一点,我是越来越觉得,会具体的什么编程语言,会具体的什么api啥的,都是虚的,这些东西说白了,只是我们通向目标的一个工具。实现目标可以有很多工具实现,所以使用什么工具不重要,重要的是实现的方法、组织工具的思路、以及顺藤摸瓜快速解决问题的能力才是上乘的本事。

          aidl是用于跨进程通信。可以看到,如果要达到跨进程通信,方法有多种,aidl只是其中的一种。

          现在网上能搜到的关于aidl很多都是activity与service之间的通信,我记得官网上也是以这个为例,看来aidl应该适用于这种案例。再吐槽下,现在国内原创实在是太匮乏了。有一次我就在百度上搜一个技术点,搜了差不多前十多页,基本上只有一个原创,其余的都是复制。正所谓哀其不幸,怒其不争,整体ian吵嚷着国内it比上不上国外,那为啥不去多想几个为什么做一些原创?有时候我真的是恨恨的咬咬牙去谷歌了,还英文搜索,老外是相当多的原创。

           1. 先定义aidl的接口,这个事什么时候都需要的。

    package com.cn.sxp.aidl;
    interface IAidlService {
        String sayHello();
    }

    这个接口简单的一逼 啊,接下来就是搞一个服务了:

           2. 服务代码:

    package com.cn.sxp.aidl;
    
    import android.app.Service;
    import android.content.Intent;
    import android.os.IBinder;
    import android.os.RemoteException;
    
    public class aidlServiceImp extends Service {
        @Override
        public IBinder onBind(Intent intent) {
            return mBinder;
        }
    
        private IAidlService.Stub mBinder = new IAidlService.Stub() {
            public String sayHello() throws RemoteException {
                return "hello world";
            }
        };
    }

    在服务中实现了这个接口,只是简单的返回一个字符串而已。

             3. 再搞一个活动,链接这个服务,调用这个方法:

    package com.cn.wx.client;
    
    import com.cn.sxp.aidl.IAidlService;
    
    import android.app.Activity;
    import android.content.ComponentName;
    import android.content.Intent;
    import android.content.ServiceConnection;
    import android.os.Bundle;
    import android.os.IBinder;
    import android.os.RemoteException;
    
    public class AidlClientActivity extends Activity {
        IAidlService mService = null;
    
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            beginBindService();
        }
    
        private void beginBindService(){
            Intent service = new Intent("com.cn.sxp.aidl.IAidlService");
            bindService(service, mConnection, BIND_AUTO_CREATE);
        }
        
        private ServiceConnection mConnection = new ServiceConnection() {
            @Override
            public void onServiceDisconnected(ComponentName name) {
                mService = null;
            }
    
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                // TODO Auto-generated method stub
                /**
                 * IAidlService.Stub类取一个实例对象
                 */
                mService = IAidlService.Stub.asInterface(service);
                try {
                    mService.sayHello();
                } catch (RemoteException re) {
                    re.printStackTrace();
                }
            }
        };
    }

    完了,原创就这么简单,何必整天抄你抄他的。

  • 相关阅读:
    在T-SQL语句中访问远程数据库(openrowset/opendatasource/openquery)
    sqlserver 编辑、修改字段说明(备注) sp_addextendedproperty
    mssqlserver修改表名,列名,添加表列,删除表列,修改表列类型
    C#语法中的select
    SET IDENTITY_INSERT的用法,具体去体验一下
    亲爱的mssql码农们,看看利用sp_addlinkedserver实现远程数据库链接
    Web.config配置文件详解
    jquery分页展示控件:kkpager
    C#给图片加水印,可设置透明度
    C#图片水印类
  • 原文地址:https://www.cnblogs.com/itblog/p/7236623.html
Copyright © 2011-2022 走看看