android 基础知识

1 应用程序框架

1 一个可以扩展的视图(views),可以用来创建应用程序,包括类表,文本框,按钮,网格等
2 内容管理器(content providers)使得应用程序可以 访问另一个应用程序的数据(如联系人链表),或者共享他们自己的数据
3 资源管理器(Resource manager)提供非代码资源的访问,如本地字符串,图形和分层文件
4 通知管理里器(Notification Manager)使得应用程序可以再状态栏中显示客户通知信息
5 活动类管理器(Activity Manager)管理应用程序生命周期并提供常用的导航回退工能

 


2 四大组件
1 Activity
特点:
1} 每个activity都被实现为一个独立的类,并且继承Activity这个基类
作用:

1) 显示由几个Views控件组成的用户接口(界面显示)
2)接收事件(按键),并对事件作出响应
3)控制显示跳转
activity的跳转操作,就像堆的入栈出栈操作,当一个新的屏幕打开后前一个屏幕会暂停,并保存在历史的堆栈中,用户可以返回到历史堆栈中的前一个屏幕,当屏幕不在使用时还可以从历史堆栈中删除。

2 Service
1)特点:

(1)长生命周期的,没有用户界面的程序,独立的进程,可一直在后台运行
(2)可以与其他组件通过远程连接绑定进行交互
(3)可对外(其他应用程序)提供服务交互接口
2)创立方法:
service有自己的生命周期,可以调用startService()启动一个service或者使用bindService()方法绑定一个存在的Service
3)使用方法
1 一旦创立好一个service 就可以在其他组件中启动该Service来使用它
也是需要传递一个Intent,调用startService()方法时,被调用的service会调用它的onCreate()方法,接着调用onStart()方法,一但启动,只有调用了stopService()才停止
2 通过bindService()方法来绑定一个Service,也会调用onCreate()方法来创建,但是不调用onStart()方法,而是调用onBind()返回给客户端一个IBinder接口,这个一般用在远程Service调用

实现方法:
绑定Service需要三个参数:bindService(intent,conn,Service.BIND_AUTO_CREATE)
第一个参数是:Intent
第二个参数是:ServiceConnection conn
实现两个方法:onServiceConnected(),onServiceDisconnected()
第三个参数:如何创建Service,绑定时自动创建
3 远程service调用
在activity里的代码需要访问Service 中的一种方法,采用远程进程调用(RPC)机制,AIDL语言来实现
如何实现:
1 创建一个AIDL文件,把Service中针对MediaPlayer的操作封装成一个接口(.aidl文件)
2 定义一个实现类,实现这接口的存根(stub)实现我们定义的操作方法
3 并在onBind()方法中返回实现该接口的对象,当我们banding该接口时调用该方法
4 在Activity中使用绑定服务的方式连接Service,但是不用Intent来传递信息,而是在ServiceConnection的onServiceConnected方法里,获得Service中Stub对象的客户端使用代理。我们通过操作Activity中的代理就可以达到操作Service中的MediaPlayer对象的目的。这样我们就可以想用本地对象一样操作Service中的对象了,那么进度条一类的需求自然也就迎刃而解。

举例:
1  我们在activity中控制mediaplayer对象进行播放,那么一旦你打开了另外一个程序譬如浏览器,那么歌声就会立刻停止,这当然不是我们需要的结果。 我们需要的是在做其他事情的同时能够在后台听歌,于是我们就需要把对MediaPlayer对象的操作放在后台Service中去。
2  我们已经把对MediaPlayer的操作转移到Service中去了,按照我们以前的做法,我们在Activity中发送一个Intent对象给Service对象,在Intent中传送播放啊、暂停啊一类的信息给Service,这样Service就知道该怎么做了。
3  现在出了一个新问题,那就是我想在Activity中显示一个进度条,这个进度条要跟着Service中的MediaPlayer中的歌曲进度同步向前走,而且如果我点击进度条中的某一个位置,还想让歌曲跳转到新的时间点继续播放,这个,该怎么实现?我们需要在Activity中操作Service中的MediaPlayer对象,就好像这个对象是自己的一样。我们可以采用Android接口定义语言 AIDL(Android Interface Definition Language)技术


3 BroadcastReceiver
 1 Broadcast是一种广泛运用的在应用程序之间传输信息的机制
 2 举个例子:
 我们拿广播电台来做个比方。我们平常使用收音机收音是这样的:许许多多不同的广播电台通过特定的频率来发送他们的内容,而我们用户只需要将频率调成和广播电台的一样就可以收听他们的内容了。Android中的广播机制就和这个差不多的道理。

电台发送的内容是语音,而在Android中我们要发送的广播内容是一个Intent。这个Intent中可以携带我们要传送的数据。

电台通过大功率的发射器发送内容,而在Android中则是通过sendBroadcast这个方法来发送(很形象的名字吧)。      

用户通过调整到具体的电台频率接受电台的内容。而在Android中要接受广播中的内容则是通过注册一个BroadCastReceiver来接收的。只有发送广播的action和接收广播的action相同,接受者才能接受这个广播。
 3 应用方面:
Android系统在进行某些动作或者状态改变时都会向全系统广播特定的Broadcast,如果某个程序包含有接收与这个Broadcast匹配的Receiver,就能通过这个Broadcast触发自定义的处理。

1 比如说拦截系统短信,拦截骚扰电话等等
2 起到了一个通知的作用,比如在service中要通知主程序,更新主程序的UI等。因为service是没有界面的,所以不能直接获得主程序中的控件,这样我们就只能在主程序中实现一个广播接受者专门用来接受service发过来的数据和通知了。
  4 下面说说如何使用
1)首先在你的程序组件里构建你要广播的Intent,使用sendBroadcast方法发送出去。
其次定义一个广播接收器,继承BroadcastReceive,并且覆盖onReceive()方法来响应事件
最后注册广播接收器
2)接收系统发出的广播,我们不需要再定义发出广播的Intent,只需要定义接收器就可以了
3)我们可以选择在AndroidManifest中注册一个广播接收器,也可以通过代码的方式来注册,当然我们也可以注销一个广播接收器
在Activity.onResume中使用registerReceiver()注册
在Activity.onPause中使用unregisterReceiver()注销
  5 Broadcast Receiver组件并没有提供可视化的界面来显示广播信息。我们可以使用Notification和NotificationManager来实现可视化的信息显示,通过他们我们可以显示广播信息的内容,图标以及震动等信息
1)获得系统级的服务NotificationManager ,通过调用getSystemService方法实现
2)实例化Notification对象设置其属性
3)调用setLatestEventInfo()方法在视图中设置图标和事件
4)发出通知notify()取消是用:cancel(ID)
因为NotificationManager对每个通知都用一个整数ID进行了唯一标识,新的通知内容可以用setLatestEventInfo()方法方便地进行修改,然后再次调用notify()显示出来。

除了Context、展开信息的标题和文本外,可以利用对象的成员值修改每个属性。要修改通知的文本信息,只能对contentTitle和contentText参数赋新值并调用setLatestEventInfo(),然后再调用notify()方法来更新通知

 

 


4 ContentProvider
  特点:
1 应用程序之间相互访问的统一接口,跨应用程序共享数据的唯一方法
  作用:
1 提供数据库查询接口
2 可对外(其他应用程序)公开数据查询服务
  什么情况下使用:
android平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序。这些数据可以存储在文件系统中、在一个SQLite数据库、或以任何其他合理的方式,其他应用可以通过ContentResolver类(见ContentProviderAccessApp例子)从该内容提供者中获取或存入数据.(相当于在应用外包了一层壳),只有需要在多个应用程序间共享数据是才需要内容提供者。例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中

它的好处:统一数据访问方式。
   使用方法:
 1 在ContentProvider中实现我们实际操作数据的方法
 2 但客户调用时通过另外一个接口,ContentResolver
 3 ContentResolver中提供和ContentProvider中对应的方法,间接的通过操作ContentResolver来操作
ContentProvider。ContentResolver通过应用程序的getContentResolver方法获得,
一般情况下,ContentProvider是单实例的,但是可以有多个ContentResolver在ContentProvider和不同的应用程序之间交互。
 4 ContentProvider通过URI对象来共享数据
通过URI可以使得知道ContentResolver和那个ContentProvider对应
 5 在android sdkapi中提供了大量的数据ContentProvider,如Contact,MediaStore
 6 另外我们也可以定义自己的ContentProvider,ContentProvider必须声明才能使用

 

 

  • newSingleThreadExecutor:创建一个单线程的线程池。这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。
  • newFixedThreadPool:创建固定大小的线程池。每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程。
  • newCachedThreadPool:创建一个可缓存的线程池。如果线程池的大小超过了处理任务所需要的线程,那么就会回收部分空闲(60秒不执行任务)的线程,当任务数增加时,此线程池又可以智能的添加新线程来处理任务。此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说JVM)能够创建的最大线程大小。
  • newScheduledThreadPool:创建一个大小无限的线程池。此线程池支持定时以及周期性执行任务的需求。

     

    android系统架构
    第一层:
    linux操作系统和驱动
    包括:安全性,内存管理,进程管理,网络协议,驱动模型
    驱动模型包括:
    显示,输入设备,音频,摄像头,wifi,蓝牙,电源管理等
    第二层:
    本地框架和java运行环境
    被android系统中不同组件使用
    本地框架:系统c库,多媒体库,surface manager,libwebcore(web 浏览器引擎)

    java运行环境:由dalvik java虚拟机和基础的java类库组成

    第三层:

    android应用框架(api)

    第四层
    android应用程序

    android应用程序的架构
    src/ java源代码存放目录
    gen/ 自动生成目录
    里面最重要的是R.java文件,这个文件在应用中起到字典的作用,是由android开发工具自动根据xml界面文件,图标和常量等各种资源的id
    res/资源目录
    存放应用中使用到的各种资源,如xml界面,图标或常量
    res/drawable 专门存放图标
    res/layout专门存放xml界面文件
    res/values 专门存放应用使用到的而各种常量
    AndroidManifest.xml 功能清单文件
    这个文件列出了应用程序提供的功能,在这个文件中,你可以指定应用层序使用到的服务如电话,互联网,短信,gps等,另外当你新添加一个activity的时候,也需要在这个文件中做相应的配置
    default.properties 系统默认信息,一般不需要修改此文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值