`

Android基本架构

 
阅读更多

先概要后细分

这里写图片描述

应用程序层——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_PROVIDER

minTime:时间更新间隔,单位:ms

minDistance:位置刷新距离,单位:m

listener:用于定位更新的监听者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

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
分享到:
评论

相关推荐

    Android Telephony架构分析

    ### Android Telephony 架构分析 #### 一、引言 Android平台(以下简称“Android”)是一套面向移动电话的软件栈,它包含了修改版的Linux操作系统、中间件以及一些应用程序。电信系统作为该平台的一个核心组成部分...

    高焕堂android系统架构详细讲解

    包括Activity管理、Intent机制、BroadcastReceiver、Service、ContentProvider等组件,它们构成了Android应用程序的基本架构。 6. **应用程序**:这是用户可以直接交互的部分,包括系统应用(如电话、短信、设置)...

    Android系统架构详解

    ### Android系统架构详解 #### 一、概述 Android操作系统是一个基于Linux内核的移动设备操作系统,广泛应用于智能手机和平板电脑等移动终端。Android系统架构由五个主要组成部分构成:Linux Kernel、Android ...

    《android 渲染架构演进》pdf

    在早期的Android系统中,渲染主要依赖于硬件加速的2D图形库,如Skia,这是Google开发的一个2D渲染引擎,用于处理基本的图形绘制和文本渲染。随着时间的推移,为了支持更复杂的3D图形和游戏,Android引入了OpenGL ES...

    Android底层架构研究

    了解GEWS的基本架构原理,有助于深入理解Android图形渲染机制。 ### **12. AndroidGWES之Android窗口管理** 窗口管理是GWES的一个重要方面,它涉及到窗口的创建、销毁、布局调整和焦点处理。WindowManagerService...

    《Android安全架构深究》PDF版本下载.txt

    1. **安全模型**:书中首先介绍了Android安全的基本模型,包括用户认证、权限管理、应用程序隔离等核心概念。 2. **权限系统**:详细解析了Android权限系统的工作原理,包括如何请求权限、如何实现细粒度控制等。 3....

    Android架构师手册

    Part01.pdf主要介绍了Android应用的基本结构和生命周期管理。这部分内容涵盖了Activity、Service、BroadcastReceiver以及ContentProvider等核心组件的用法和最佳实践。同时,讲解了如何有效地处理应用的启动过程,...

    Android_Audio架构全分析.pdf

    正是在这种背景下,本文将对Android Audio的基本框架及其底层驱动实现进行分析。 #### 平台和功能 - **硬件平台**:SMdkc100、WM9714等 - **软件平台**:Android 2.1、Linux Kernel 2.6.29、alsa-lib 1.0.19、alsa-...

    Android Application部分详解

    - **Android基本架构**: - **Linux内核层**:负责处理硬件驱动、进程管理、内存管理等功能。 - **硬件抽象层(HAL)**:提供了硬件接口,使得上层应用能够与硬件进行交互。 - **系统运行时库**:包括核心库和...

    高焕堂android应用软件架构设计

    首先,我们来谈谈Android应用架构的基本概念。架构是一种组织代码的方式,它定义了组件之间的关系、数据流和控制流。良好的架构可以帮助我们遵循单一职责原则,使每个组件专注于一项任务,从而降低复杂性和耦合度。 ...

    android程序经典架构.zip_V9A_android_android 架构设计_deathoof_架构

    首先,我们来理解一下Android架构设计的基本原则。Android应用通常采用分层架构,包括数据层、业务逻辑层、表示层等。数据层处理数据的存储和获取,如SQLite数据库、网络API调用;业务逻辑层负责处理应用的核心功能...

    Android项目基础架构。包含架构分层、基本工具层等

    采用二次封装后的okhttp3+Gson.(没有使用...基本功能: POST请求 GET请求 上传文件&进度监听 下载文件&进度监听 返回可以选择Gson格式 取消某个context的所有网络请求 并且将该功能模块独立为MyOkhttp,可以重复使用.

    Android架构基本知识中文最新版本

    本文档主要讲述的是Android架构基本知识;Android依赖Linux内核2.6来提供核心服务,比如进程管理、网络协议栈、硬件驱动。在这里,Linux内核作为硬件层和系统软件栈层之间的一个抽象层。这个操作系统并非类GNU/Linux...

    android架构-复习基本OOP知识d

    本主题"android架构-复习基本OOP知识d"旨在帮助开发者深入理解并熟练运用OOP原则,以便在实际的Android开发工作中实现高效、灵活的代码设计。 面向对象编程有四大基本原则:封装、继承、多态和抽象。这些概念构成了...

    Android的MediaPlayer架构介绍

    ### Android的MediaPlayer架构详细介绍 #### 一、MediaPlayer概述 Android平台上的`MediaPlayer`是一个非常重要的组件,用于处理音频和视频的播放任务。无论是系统自带的音乐播放器还是视频播放器应用,都依赖于`...

    Android Android精通到架构师培训视频,资料,源码

    通过这个培训资源,你将不仅能够掌握Android开发的基本技能,还能深入了解高级概念和技术,逐步成长为一名专业的Android架构师。同时,资料中的实战项目和源码分析将帮助你在实际开发中快速积累经验,解决各种挑战。

    基于Android平台的百度地图开发设计方案.pdf

    2.2 Android基本架构 Android由Linux内核、系统运行库、应用程序框架和应用程序四部分组成。这些组件协同工作,为开发者提供了丰富的API,可以方便地访问硬件资源和系统服务,如位置服务、网络连接等。 2.2.1 ...

    android在线订餐项目源码-IT计算机-毕业设计.zip

    1. **Android基本架构与组件**:该项目涉及Android应用的基础架构,包括Activity(活动)、Service(服务)、BroadcastReceiver(广播接收器)以及ContentProvider(内容提供者)。Activity是用户界面的主要载体,...

Global site tag (gtag.js) - Google Analytics