接口interface

interface是一些功能的集合,但它只定义了对象必须实现的成员,而不包含成员的实现代码,成员的具体代码由实现接口的类提供。Android对接口的使用场景主要有三类:事件监听器接口、对象序列化结构、线程类相关接口。

事件监听器接口

这类接口名称一般以Listener或者CallBack结尾,监听器定义了事件触发时应该进行的操作方法,具体操作步骤需要自定义实现。常见的监听器接口有:
1、点击监听器,如OnClickListener、OnLongClickListener、OnCheckedChangeListener、OnItemClickListener、OnItemLongClickListener、OnItemSelectedListener等等,详见《 Android开发笔记(四十三)点击事件》;以及OnSeekBarChangeListener,详见《 Android开发笔记(五十八)铃声与震动》;
2、UI监听器,如AnimationListener、OnPageChangeListener、TextWatcher,详见《 Android开发笔记(四十四)动态UI事件》;
3、浏览器交互监听器,如WebViewClient、WebChromeClient、DownloadListener,详见《 Android开发笔记(六十四)网页加载与JS调用》;
4、手机信号监听器,如LocationListener、PhoneStateListener,详见《 Android开发笔记(四十六)手机相关事件》;
5、摄像头监听器,如AutoFocusCallback、ShutterCallback、PictureCallback、OnZoomChangeListener,详见《 Android开发笔记(五十六)摄像头拍照》;
6、媒体录制与播放监听器,如OnErrorListener、OnInfoListener、OnPreparedListener、OnCompletionListener、OnSeekCompleteListener、OnVideoSizeChangedListener,详见《 Android开发笔记(五十七)录像录音与播放》;

对象序列化接口

这类接口主要有Parcelable和Serializable两种结构定义,对象序列化接口的详细介绍参见《 Android开发笔记(二十七)对象序列化》。

线程类相关接口

这类接口定义了线程可定制的操作方法,主要包括以下三种接口:
1、Runnable接口,用于定义一系列连续处理的事务,详见《 Android开发笔记(四十七)Runnable接口实现多线程》;
2、ThreadFactory接口,用于定义线程池中的线程工厂方法,详见《 Android开发笔记(七十六)线程池管理》;
3、UncaughtExceptionHandler接口,用于定义线程遇到未知异常时的处理方法,详见《 Android开发笔记(七十八)异常容错处理》;

抽象类abtract class

抽象类是一个包含抽象方法的类,不过是否包含抽象方法这不是必要条件,只要类名被abtract修饰即可认为是抽象类。所谓抽象方法,其实与接口中的方法类似,都是只定义了成员方法,但不包括成员的实现代码,具体代码由抽象类的派生类来实现。抽象类与普通类的区别主要有三点:
1、抽象方法必须为public或者protected,因为如果为private,则不能被子类继承,就无法实现该方法;
2、抽象类与接口一样都不能直接实例化对象;
3、由抽象类派生出的子类必须实现父类的抽象方法,否则该子类也必须定义为抽象类;

Android对抽象类的使用场景主要有三类:部分基础控件、适配器、自定义处理对象。

部分基础控件

此种抽象类主要是一些聚合了其他控件主要功能的类,包括:
1、复合按钮CompoundButton,其实它并未定义抽象方法,仅仅是个中间层的基类。CompoundButton的派生类包括RadioButton、CheckBox、Switch等等,详见《 Android开发笔记(三十七)按钮类控件》;
2、适配视图AdapterView,它与适配器联合使用,实现列表展示的效果。AdapterView的派生类包括Spinner、ListView、GridView等等,详见《 Android开发笔记(三十八)列表类视图》;
3、基础动画Animation,它也没有定义抽象方法,但定义了一个空方法applyTransformation,每个派生类都要重写该方法,以实现具体的动画效果。Animation的派生类包括AlphaAnimation、RotateAnimation、ScaleAnimation、TranslateAnimation等等,详见《 Android开发笔记(十五)淡入淡出动画》、《 Android开发笔记(十六)秋千摇摆动画》;

适配器

适配器在实际使用时都要派生重写,所以sdk里的适配器类都是抽象类或接口,包括:
1、列表适配器,如ListAdapter、SpinnerAdapter、BaseAdapter等等,详见《 Android开发笔记(三十八)列表类视图》;
2、页面适配器,如PagerAdapter、FragmentPagerAdapter、FragmentStatePagerAdapter等等,详见《 Android开发笔记(二十一)横幅轮播页Banner》;

自定义处理对象

在该情况中,抽象类里的个别方法需要开发者来实现,具体的类包括:
1、SQLite操作类SQLiteOpenHelper,需要开发者实现onCreate和onUpgrade方法,详见《 Android开发笔记(三十)SQLite数据库基础操作》;
2、异步任务处理AsyncTask,需要开发者实现doInBackground方法,详见《 Android开发笔记(四十九)异步任务处理AsyncTask》;

内部类

Java允许在类中再定义类,这种在其它类内部定义的类就叫做内部类。内部类有四种,分别是类中内部类、方法内部类、参数内部类和静态嵌套类,其中Android开发中常用的是类中内部类和参数内部类两种。

类中内部类

类中内部类在类内部定义,它与上级类的成员方法平级;之所以单独形成一个内部类,是因为类中的功能可以单独管理;但它又不新建一个java文件,是因为内部类与上级类存在一定程度的耦合。内部类有如下特点:
1、内部类可以访问上级类的所有成员(包括变量和方法),当然包括私有成员;
2、内部类中的this指的是内部类本身,如果要用上级类的实例对象,得使用“上级类的类名.this”获取;

Android开发中常见的类中内部类主要有以下几种:
1、各种建造者Builder,用于对象参数的统一建造,避免在运行过程中发生参数值变更;
2、各种布局参数LayoutParams,用于布局参数的赋值与获取;

参数内部类

参数内部类又叫匿名内部类,它在方法调用时,以临时定义类的形式传入参数位,因为是临时定义,所以没有指定具体的类名。匿名内部类主要用于代码行很少的自定义类,在实际开发中,常见的匿名内部类多是由OnClickListener或者Runnable派生出来。

下面是基于OnClickListener的匿名内部类代码例子:

 vh.txtLineOne.setOnClickListener(new OnClickListener() {public void onClick(View v) {Intent intent = new Intent(mContext, GangpeiDetailActivity.class);((Activity) mContext).startActivity(intent);}});

下面是基于Runnable的匿名内部类代码例子:

 //通过Handler来确保init方法的执行在主线程中handler.post(new Runnable() {public void run() {//调用客户端setContactInfo方法webView.loadUrl("javascript:setContactInfo('" + getJsonStr() + "')");}});

点此查看Android开发笔记的完整目录

Android开发笔记(八十六)几个特殊的类相关推荐

  1. Android开发笔记(十六)秋千摇摆动画SwingAnimation

    上节博主介绍了AlphaAnimation和淡入淡出动画的使用,其实AlphaAnimation只是四种补间动画中的一种.那么为了加深对其他补间动画的理解,我想说说旋转动画RotateAnimatio ...

  2. Android开发笔记(一百六十八)为应用绑定通知渠道并展示消息角标

    为了分清消息通知的轻重缓急,从Android8开始新增了通知渠道,并且必须指定通知渠道才能正常推送消息.一个应用允许拥有多个通知渠道,每个渠道的重要性各不相同,有的渠道消息在通知栏被折叠成小行,有的渠 ...

  3. Android开发笔记(一百六十六)H5通过WebView录像上传

    前面的博文< Android开发笔记(一百五十二)H5通过WebView上传图片>介绍了如何拍照上传给网页,不料客户又要求再加个摄像上传给网页.既然如此,那么再探讨一下如何实现这个摄像上传 ...

  4. Android开发笔记(一百六十五)利用红外发射遥控电器

    红外遥控是一种无线控制技术,它具有功耗小.成本低.易实现等诸多优点,因而被各种电子设备特别是家用电器广泛采用,像日常生活中的电视遥控器.空调遥控器等等基本都采用红外遥控技术. 不过遥控器并不都是红外遥 ...

  5. Android开发笔记(一百六十)休眠模式下的定时器控制

    定时器AlarmManager常常用于需要周期性处理的场合,比如闹钟提醒.任务轮询等等.并且定时器来源于系统服务,即使App已经不在运行了,也能收到定时器发出的广播而被唤醒.似此回光返照的神技,便遭到 ...

  6. Android开发笔记(十八)书籍翻页动画PageAnimation

    前面几节的动画都算简单,本文就介绍一个复杂点的动画--书籍翻页动画.Android有自带的翻页动画ViewPager,不过ViewPager只实现了平移效果.即便使用补间组合动画或者属性动画,也只是把 ...

  7. Android开发笔记(一百六十九)利用BottomNavigationView实现底部标签栏

    在Android Studio上创建官方默认的首屏标签页面很方便,首先右击需要添加标签栏的模块,在弹出的右键菜单中依次选择"New"--"Activity"-- ...

  8. Android开发笔记(一百六十四)仿京东首页的下拉刷新

    上一篇文章介绍了高仿京东的沉浸式状态栏,可是跟京东首页的头部轮播图相比,依然有三处缺憾: 1.京东的头部Banner上方,除了有悬浮着的状态栏,状态栏下面还有一行悬浮工具栏,内嵌扫一扫图标.搜索框,以 ...

  9. Android开发笔记(一百六十二)蓝牙设备的连接与配对

    蓝牙是一种短距离无线通信技术,它由爱立信公司于1994年创制,原本想替代连接电信设备的数据线,但是后来发现它也能用于移动设备之间的数据传输,所以蓝牙技术在手机上获得了长足发展. 因为手机内部的通讯芯片 ...

  10. Android开发笔记(一百六十七)Android8.0的画中画模式

    前面的博文< Android开发笔记(一百五十九)Android7.0的分屏模式>介绍了Android7.0的多窗口特性,但是这个分屏的区域是固定的,要么在屏幕的上半部分,要么在屏幕的下半 ...

最新文章

  1. c#WebBrowser进阶
  2. 非模态的titlewindow,点击外部时的事件
  3. C++中namespace的理解与实践
  4. 手动加载spring, ApplicationContext怎么销毁
  5. C语言数组、字符与字符串笔记
  6. (回溯Uva524)素数环
  7. SSL 自签证书工具源码
  8. Json学习总结(4)——Json基础知识回顾
  9. java实现 mysql 身份认证,java-从Filter中的数据库对用户进行身份验证是一种好习惯吗?...
  10. 关于 Android Service 的介绍都在这了
  11. Morrios灵敏度分析法
  12. 用vue做一个简单的emoji表情组件
  13. DM368开发 -- 视频监控系统相关技术研究(转毕设)
  14. 在可靠的头肩底中淘金(转 封起De日子)
  15. vue子元素点击事件与父元素点击事件冲突 子元素点击事件不触发
  16. 微码汇:从O2O的前世今生看接下来该如何“O”
  17. 网页游戏排行榜2010前十名
  18. CUDA:在NPP中直方图均衡化实例
  19. 1062 最简分数 (20分)
  20. DirectX11_API流程入门篇

热门文章

  1. CCF认证2014-9-2 画图
  2. 机器学习第二回——多变量线性回归
  3. 吴恩达机器学习【第五天】逻辑回归模型
  4. 【Docker】安装并测试安装成功
  5. Java自动化测试框架-06 - 来给你的测试报告化个妆整个形 - (下)(详细教程)
  6. python内建模块函数_Python中一些内建函数及os等模块的用法
  7. python安装依赖比较慢的解决方法
  8. Java枚举(Enum)类型的基本介绍与原理探求
  9. Linux FTP服务安装与账号设置
  10. 入门几款好的UML工具介绍