Android基本架构

来源:互联网 发布:江西财经大学网络平台 编辑:程序博客网 时间:2024/06/08 18:55

先概要后细分

这里写图片描述

应用程序层——APPLICATIONS

没什么好说的,就是用Java写的一堆应用。

应用程序框架层–APPLICATIONS FRAMEWORK

为了帮助快速开发,写的一些很重要的系统服务
就是一些很重要的Manager:

ActivityManager:

(ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

getRunningAppProcesses():获取系统运行的进程;
getRunningServices(int num):获取系统正在运行的Service;
getRunningTasks(int num):获取正在运行的Activity;
getRecentTasks(int num,int flag):获取最近运行的应用;ps:这个方法在android 5.0被废弃了,原因是为了更好的保护用户隐私,用getAppTasks()代替;

WindowManager:

(WindowManager)getSystemService(Context.WINDOW_SERVICE); 

它是显示View的最底层,可以添加view到屏幕,也可以从屏幕删除view,它面向的对象一端是屏幕,另一端就是View,我们的Activity或者Diolog底层的实现也是通过WindowManager。
addView(View view,ViewGroup.LayoutParams mParams):添加View到屏幕;
removeView(View view):移除View出屏幕;
updateViewLayout(View view, ViewGroup.LayoutParams params):更新View的状态;

常见的悬浮窗口:继承Service写一个类,getApplicationContext().getSystemService来获取WindowManager,设置params.type=WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,记着还要添加权限android.permission.SYSTEM_ALERT_WINDOW,表示开启应用悬浮窗,在onStartCommand()方法添加View,addView(),在onDestroy()里removeView();

ContentProvider:

向我们提供了在应用程序之间共享数据的一种机制,最常见的就是我们有时需要操作系统的媒体库和通讯录等;
它是android的四大组件之一,所以自己要自定义一个Content Provider需要在AndroidManifest里注册;

onCreate():用于为操作数据做准备;
insert:插入数据,返回插入的记录所代表的URI;
update:更新数据,返回操作影响的记录行数;
delete:删除数据,返回操作影响的记录行数;
query:查询数据,返回Cursor;
getType:记录的类型,如果操作集合,则必须以vnd.android.cursor.dir开头,如果操作非集合,则必须以vnd.android.cursor.item开头,比如vnd.android.cursor.dir/person外部调用的时候,需要使用ContentResolver。

ContentUris类操作URI:
ContentUris.withAppendId(URI param,int id):为某个uri添加ID;
ContentUris.parseId(URI uri):提取uri中最后的ID;

UriMatcher类匹配URI:
UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); //创建一个URI匹配器,参数为不匹配时的返回值
在onCreate中使用matcher.addURI(“authorities”,”path”,code); //加入匹配的URI,如果匹配,则matcher.match(uri)返回code;

PackageManager:

获取android系统中应用程序的信息,主要包括packagename、label、icon、占用大小;

PackageInfo:包名、版本信息
ApplicationInfo:图标、label
ActivityInfo:activity name

TelephonyManaer:

获取电话卡相关的一些信息;
(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);

getDeviceId():手机号(有些手机号无法获取,是因为运营商在SIM中没有写入手机号);
getLine1Number():获取手机SIM卡的序列化;
getCallState():获取电话状态,CALL_STATE_IDLE=0(无活动)、CALL_STATE_RINGING=1(响铃)、CALL_STATE_OFFHOOK=2(摘机);

ResourceManager:

顾名思义就是资源管理,android中的资源很多包括图片,用户界面(Layout
xml),字体,颜色,UI组件的Id等等都可以称之为资源,这些丰富的资源,都是通过Resource Manager来统一进行管理。
引用资源的语法:R.resource_type.resource_name 或者
android.R.resource_type.resource_name;

举两个特别的例子:
assets文件夹:存放不进行编译加工的原生文件,即该文件夹里面的文件不会像xml,java文件被预编译,可以存放一些图片,html,js, css等文件。
raw文件夹:直接复制到设备中的任意文件。它们无需编译,添加到你的应用程序编译产生的压缩文件中。

android:textColor=”?android:textDisabledColor”等效于?android:attr/android:textDisabledColor,要区分“@”和“?”。

访问Drawable:Context.getResources().getDrawable(R.drawable.imageId);
访问Raw:getResources().openRawResource(资源ID);
访问Assets文件夹
1.在Activity里面调用getAssets()来获取AssetManager引用。
2.再用AssetManager的open(String fileName, int accessMode)方法则指定读取的文件以及访问模式就能得到输入流InputStream。
3.已经open file 的inputStream读取文件,读取完成后记得inputStream.close()。
4.调用AssetManager.close()关闭AssetManager。

LocationManager:

(LocationManager) getSystemService(Context.LOCATION_SERVICE);

getProvider(LocationManager.GPS_PROVIDER);//1.通过GPS定位,较精确,也比较耗电
getProvider(LocationManager.NETWORK_PROVIDER);//2.通过网络定位,对定位精度度不高或省点情况可考虑使用使用的时候要对其进行判断,gpsProvider或netProvider不等于空的时候,在请求位置更新,并对其监听

/*provider:用于定位的locationProvider字符串:LocationManager.NETWORK_PROVIDER/LocationManager.GPS_PROVIDERminTime:时间更新间隔,单位:msminDistance:位置刷新距离,单位:mlistener:用于定位更新的监听者locationListener*/locationManager.requestLocationUpdates(provider, minTime, minDistance, listener);

如果等于null,需要提示用户打开定位服务,

//代码如下,跳转过去就行了intent.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS);

LocationListener.onLocationChanged(Location location):
location.getLatitude():得到纬度;
location.getLongitude():得到经度;

Geocoder:
经纬度解码者可用于将经纬度转为详细位置信息:国家,城市,街道名称等;

Geocoder gc = new Geocoder(this, Locale.getDefault());List<Address> locationList=gc.getFromLocation(latitude, longitude, 1);Address address = locationList.get(0);//得到Address实例address.getCountryName();//得到国家名称,比如:中国;address.getLocality();//得到城市名称,比如:北京市;address.getAddressLine(i);//得到周边信息,包括街道等,i=0,得到街道名称 ps:用在for循环中

NotificationManager :

(NotificationManager) getSystemService(NOTIFICATION_SERVICE);

notify(String tag ,int id, Notification notification):将通知加入状态栏, 标签为tag,标记为id。
cancelAll():移除所有通知 (只是针对当前Context下的Notification)
cancel(int id):移除标记为id的通知 (只是针对当前Context下的所有Notification)

Notification:

Notification notification = new Notification();                notification.icon = R.drawable.ic_launcher;// 设置通知的图标                notification.tickerText = tickerText; // 显示在状态栏中的文字                notification.when = when; // 设置来通知时的时间                notification.sound = Uri.parse("android.resource://com.sun.alex/raw/dida"); // 自定义声音

notification.flags

Notification.FLAG_NO_CLEAR; // 点击清除按钮时就会清除消息通知,但是点击通知栏的通知时不会消失
Notification.FLAG_ONGOING_EVENT; // 点击清除按钮不会清除消息通知,可以用来表示在正在运行
Notification.FLAG_AUTO_CANCEL; // 点击清除按钮或点击通知后会自动消失
Notification.FLAG_INSISTENT; // 一直进行,比如音乐一直播放,知道用户响应
notification.defaults:
Notification.DEFAULT_SOUND; // 调用系统自带声音
Notification.DEFAULT_VIBRATE;// 设置默认震动
Notification.DEFAULT_ALL; // 设置铃声震动
Notification.DEFAULT_ALL; // 把所有的属性设置成默认

系统运行库层—-LIBRARIES、ANDROID RUNTIME

Linux核心层—–LINUX KERNEL

0 0
原创粉丝点击