- 简书0 系统概览 0.1 Android 0.1.1 起源 Android 是一种基于 Linux 的自由及开放源代码的操做系统,主要使用于移动设备如智能手机和平板电脑,由 Google...java
2018.07.05 04:31:46 字数 2,809 阅读 242react
Android 是一种基于 Linux 的自由及开放源代码的操做系统,主要使用于移动设备如智能手机和平板电脑,由 Google 公司和开放手机联盟领导及开发。linux
Android 系统架构android
主要使用 java 语言开发的应用程序,如通信录、浏览器等各类应用 appios
视图(View):能够用来构建应用程序,如列表,文本框,WebView 浏览器组件等。
内容提供器(Content Provider):对外部其余应用提供数据
资源管理器(Resource Manager):提供非代码资源的访问,如本地字符串,图形,布局文件等。
通知管理器(Notification Manager):使得应用程序能够在状态栏中显示自定义的提示信息。
活动管理器( Activity Manager):用来管理应用程序生命周期并提供经常使用的导航回退功能。git
Android 包含一些 C/C++ 库,这些库能被 Android 系统中不一样的组件使用。它们经过 Android 应用程序框架为开发者提供服务。程序员
Android 包括了一个核心库,该核心库提供了 JAVA 编程语言核心库的大多数功能。
每个 Android 应用程序都在它本身的进程中运行,都拥有一个独立的 Dalvik 虚拟机实例。Dalvik 被设计成一个设备能够同时高效地运行多个虚拟系统。 Dalvik 虚拟机执行 (.dex) 的 Dalvik 可执行文件,该格式文件针对小内存使用作了优化。同时虚拟机是基于寄存器的,全部的类都经由 JAVA 编译器编译,而后经过 SDK 中 的 "dx" 工具转化成. dex 格式由虚拟机执行。
Dalvik 虚拟机依赖于 linux 内核的一些功能,好比线程机制和底层内存管理机制。github
Android 的核心系统服务依赖于 Linux 2.6 内核,如安全性,内存管理,进程管理, 网络协议栈和驱动模型。 Linux 内核也同时做为硬件和软件栈之间的抽象层。objective-c
iOS 是由苹果公司开发的移动操做系统。苹果公司最先于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操做系统同样,属于类 Unix 的商业操做系统。数据库
iOS 系统架构
Cocoa Touch 是可触摸层,这一层为咱们的应用程序开发提供了各类有用的框架,而且大部分与用户界面有关,本质上来讲它负责用户在 iOS 设备上的触摸交互操做。
Media 是媒体层,经过它咱们能够在应用程序中使用各类媒体文件,进行音频与视频的录制,图形的绘制,以及制做基础的动画效果。
Core Services 是核心服务层,能够经过它来访问 iOS 的一些服务。
Core OS 是位于 iOS 系统架构最下面的一层是核心操做系统层,它包括内存管理、文件系统、电源管理以及一些其余的操做系统任务。它能够直接和硬件设备进行交互。做为 app 开发者不须要与这一层打交道。
Android 使用的语言主要是 Java,也能够经过 jni 来运行 C 语言编写的代码或者库,从而提升运行效率。
Kotlin 是 Google 推荐的新的编程语言
上古时代:集成了 android 开发插件的 Eclipse,使用的是 Ant 构建工具
摩登时代:Android Studio,源自 jetbrain 的 idea 开发工具 ,使用 gradle 构建项目
windows / linux / mac
Android Studio
iOS 使用的语言主要是 objective-c 语言,发明于上世纪八十年代
Swift 是这几年开始推荐的语言
Xcode 开发环境,必须使用 mac 系统才能开发。
mac
Xcode
Android 程序主要有如下几个部分组成:
Android 工程
代码展开
iOS 程序主要有如下几个部分组成:
[UIViewController loadView] [UIViewController viewDidLoad] [UIViewController viewWillAppear:] [UIViewController shouldAutorotateToInterfaceOrientation:] [UIViewController viewWillLayoutSubviews] [UIView layoutSubviews] [UIViewController viewDidLayoutSubviews] [UIViewController viewDidAppear:]
-(void) toMainViewControllerAfterSeconds{
MainViewController *mainVC = [[MainViewController alloc] init];
[self presentViewController:mainVC animated:YES completion:nil]; }
其中的数据能够经过 UIViewController 对象自定义属性 / 变量来传递
UINavigationController 用来管理视图控制器,在多视图控制器中经常使用。它以栈的形式管理视图控制器,管理视图控制器个数理论上不受限制 (实际受内存限制),push 和 pop 方法来弹入弹出控制器,最多只能显示一个视图控制器,那就是处于栈顶的视图控制器。
通常状况下,UINavigationController 最少管理一个控制器,即最少有一个根视图控制器或者叫作栈底视图控制器。固然也有例外,若是不给它添加视图控制器也不会报错,界面上也有视图,由于 UINavigationController 继承自 UIViewController,也有本身的 view,只不过默认状况下. view.backgroundColor 为 nil,即透明的。
Android 中,程序入口是由 AndroidManifest.xml 文件中响应的 xml 配置指定的 application 以及程序的 activity 入口。iOS 中,程序的入口是 main.h 文件
#import <UIKit/UIKit.h> #import "AppDelegate.h" int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } }
在这里指定了程序的代理,AppDelegate 类,至关因而 android 的 application 类。
#import "AppDelegate.h" #import "SplashViewController.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; SplashViewController *appStartController = [[SplashViewController alloc] init]; self.window.rootViewController = appStartController; [self.window makeKeyAndVisible]; return YES; } - (void)applicationWillResignActive:(UIApplication *)application { } - (void)applicationDidEnterBackground:(UIApplication *)application { } - (void)applicationWillEnterForeground:(UIApplication *)application { } - (void)applicationDidBecomeActive:(UIApplication *)application { } - (void)applicationWillTerminate:(UIApplication *)application { } @end
AppDelegate 的头文件:
#import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @end
iOS 中的资源文件能够放在任意一个文件夹下,但特色是整个工程不能有重复的文件名。在图片适配方面,iOS 采用图片名称 +@2x.png 的方式,适配大屏手机。Android 采用的是放置在不一样的资源文件夹下,如 drawable drawable-hdpi drawable-xxhdpi 等,同一个相同图片文件的名称必须相同。
Android 添加 view 采用的是使用 layout 文件的方式,也可使用代码的方式,即 addView()。
iOS 可使用 xcode 提供的 storyboard 工具,来拖动调整控件,并经过在 storyboard 文件中指定对应的 viewcontroller 类,来对 viewcontroller 进行 view 的布局,也可使用代码 addSubView 的方式进行添加,因为 iOS 的布局代码布局方式比较繁琐,通常采用第三方的代码布局方案,如 masonry:
[_statusBarView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.view).offset(0); make.size.mas_equalTo(CGSizeMake(self.view.frame.size.width, UI_STATUS_BAR_HEIGHT)); }];
可采用 pod 的方式引用
source 'https://github.com/CocoaPods/Specs.git' platform :ios, '8.0' target 'TestOC' do pod 'AFNetworking', '~> 2.6.3’ pod 'Masonry' pod 'Toast', '~> 3.1.0' pod 'JSONModel' pod 'SDWebImage', '~>3.8' end
可采用 gradle 的方式引用
source 'https://github.com/CocoaPods/Specs.git' platform :ios, '8.0' target 'TestOC' do pod 'AFNetworking', '~> 2.6.3’ pod 'Masonry' pod 'Toast', '~> 3.1.0' pod 'JSONModel' pod 'SDWebImage', '~>3.8' end
apply plugin: 'com.android.application'
apply plugin: 'io.fabric' apply plugin: 'com.neenbedankt.android-apt' android { useLibrary 'org.apache.http.legacy' dexOptions { jumboMode = true javaMaxHeapSize = "6g" dexInProcess = true } compileSdkVersion 25 buildToolsVersion "25.0.3" defaultConfig { applicationId "org.wordpress.android" versionName "alpha-62" versionCode 426 minSdkVersion 16 targetSdkVersion 25 multiDexEnabled true vectorDrawables.useSupportLibrary = true buildConfigField "boolean", "AZTEC_EDITOR_AVAILABLE", "true" buildConfigField "boolean", "SHARING_FEATURE_AVAILABLE", "false" buildConfigField "boolean", "VIDEO_OPTIMIZATION_AVAILABLE", "false" } productFlavors { vanilla { buildConfigField "boolean", "AZTEC_EDITOR_AVAILABLE", "false" } zalpha { applicationId "org.wordpress.android" buildConfigField "boolean", "SHARING_FEATURE_AVAILABLE", "true" buildConfigField "boolean", "VIDEO_OPTIMIZATION_AVAILABLE", "true" } wasabi { applicationId "org.wordpress.android.beta" minSdkVersion 21 buildConfigField "boolean", "SHARING_FEATURE_AVAILABLE", "true" } } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard.cfg' } debug { minifyEnabled false buildConfigField "String", "APP_PN_KEY", "\"org.wordpress.android.debug.build\"" buildConfigField "boolean", "VIDEO_OPTIMIZATION_AVAILABLE", "true" ext.enableCrashlytics = false } } } dependencies { compile('com.crashlytics.sdk.android:crashlytics:2.5.5@aar') { transitive = true; } compile 'com.google.code.gson:gson:2.6.+' compile 'org.ccil.cowan.tagsoup:tagsoup:1.2.1' compile 'com.android.support:support-compat:25.3.1' compile 'com.android.support:support-core-ui:25.3.1' compile 'com.android.support:support-fragment:25.3.1' compile 'com.android.support:multidex:1.0.1' compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.android.support:cardview-v7:25.3.1' }
项目名称 | 项目信息 |
---|---|
AFNetworking | 做者是 NSHipster 的博主, iOS 开发界的大神级人物, 毕业于卡内基 · 梅隆大学, 开源了许多牛逼的项目, 这个即是其中之一, AFNetworking 采用 NSURLConnection + NSOperation, 主要方便与服务端 API 进行数据交换, 操做简单, 功能强大, 如今许多人都用它取代 ASIHTTPRequest |
GPUImage | 一款强大的图片滤镜工具, 支持自定义滤镜, 可用来实时处理图片和视频流, 做者是 SonoPlot 公司的 CTO, 在很小的时候便开始接触编程, 他在 SO 上面的回答也有不少值得阅读, GPUImage 这个项目从 2012 年开始, 使用 OpenGL 图形程序接口编写, 性能很是好, 如今不少 iOS 程序员都用它来实现 iOS 的模糊效果 |
SDWebImage | 做者 Olivier Poitrey 是 Dailymotion 的 CTO, 拥有多个不错的开源项目, 此项目经常使用于对从 Web 端接受到的图片进行缓存, 是 UIImageView 的扩展, 应用起来比较简单 |
RestKit | 主要用于 iOS 上网络通讯, 容许与 RESTful Web 服务交互, 经常使用于处理 API, 解析 JSON, 映射响应对象等操做, 简单易用, 方便你把全部精力都放在对数据的操做上 |
ReactiveCocoa | 由 GitHub 工程师们开发的一个应用于 iOS 和 OS X 开发的函数响应式编程新框架, Matt 称其为 "An open source project that exemplifies this brave new era for Objective-C", 也有人说它是 Cocoa 的将来, 具体可看唐巧写的这篇文章 |
three20 | 由 Facebook iOS 客户端衍生出的一款 iPhone 框架, 内置许多丰富的功能, 有丰富的界面, 对底层的操做便捷, 为开发者省下了不少时间, 但如今已经中止了更新, 一个 PR 把代码删得干干净净, 不要好奇去点开 Files changed, 我点开后该页面直接卡死, three20 当中的一位做者建立了 Nimbus, 算是 three20 的一个替代品 |
MBProgressHUD | 做者 Matej Bukovinski 是一位全栈工程师, UI/UX 设计师, 此项目是一款提示框第三方库, 帮助开发者快速应用到项目中) |
MagicalRecord | 做者是 Coursera 的 iOS 工程师, 该项目创做灵感来自于 Ruby on Rails 的 Active Record, 主要为方便操做 CoreData 而生, 帮助清除 CoreData 引用的代码, 协助方便 CoreData 的工做 |
FMDB | 一个对 SQLite 进行封装的库, 使用起来方便, 简单 |
Mantle | 做者是 GitHub 的员工, 文档写的很清楚: Mantle makes it easy to write a simple model layer for your Cocoa or Cocoa Touch application, 主要用来将 JSON 数据模型化为 Model 对象, 唱吧在前段时间也改用 Mantle 了. |
FlatUIKit | 收集了不少扁平化 UI 的 iOS 组件, 方便使用 |
ASIHTTPRequest | 一个轻量级的 iOS 网络通讯类库, 基于 CFNetwork 框架开发, 但如今已经中止更新, 多数开发者改用 AFNetworking 替代) |
FastImageCache | Path 公司出品的 iOS 库, 做者 Mallory Paine 是苹果前员工, 此类库适用于在滚动时快速显示图像, 高速持久是其最大的特色 |
Masonry | 一个轻量级的布局框架, 同时支持 iOS 和 Mac OS X, 语法优雅, 帮助开发者快速适配不一样分辨率的 iOS 设备 |
Shimmer | Facebook 推出的一款具备闪烁效果的第三方控件, 供它旗下一款名为 Paper 的应用使用, 安装使用整个过程都十分简单 |
SVProgressHUD | 又一款轻量级的 iOS 第三方控件, 用于显示任务加载时的动画, 很是轻便, 容易使用 |
Slate | 一款窗口管理应用程序, 但在两年前就已经中止更新了 |
JSONKit | 主要用于解析 JSON, 适用于 iOS6 如下环境, 自从 iOS5 开始 Apple 官方给出了 NSJSONSerialization API, 自此你们都用官方的了 |
项目名称 | 项目简介 |
---|---|
react-native | 这个是 Facebook 在 React.js Conf 2015 大会上推出的基于 JavaScript 的开源框架 React Native, 该框架结合了 Web 应用和 Native 应用的优点, 可使用 JavaScript 来开发 iOS 和 Android 原生应用 |
Android-Universal-Image-Loader | ImageLoader 是最先开源的 Android 图片缓存库, 强大的缓存机制, 早期被普遍 Android 应用使用, 至今仍然有不少 Android 开发者在使用 |
RxJava | RxJava 是一个在 Java VM 上使用可观测的序列来组成异步的, 基于事件的程序的库, 简单来讲它就是一个实现异步操做的库, RxJava 的优势在于一个词 "简洁", 使用它就算你程序逻辑有多么复杂, 它依然可以保持简洁易懂 |
retrofit | Retrofit 是 Square 公司出品的 HTTP 请求库, 同时是 Square 是最先开源项目之一, Retrofit 是目前 Android 最流行的 Http Client 库之一, 目前版本是 Retrofit2.0 Beta4, 愈来愈多 Android 开发者开始使用这个请求库了 |
okhttp | OkHttp 是 Square 公司出品的 HTTP 另外一个请求库, Google 不推荐人们使用 HttpClient, 但是 HttpURLConnection 实在是太难用了, 所以不少人使用了 OkHttp 来解决这问题, 听说 Android4.4 的源码中能够看到 HttpURLConnection 已经替换成 OkHttp 实现呢 |
SlidingMenu(不建议使用) | 一个侧滑菜单开源库, 在 Google 本身原生态的侧滑菜单 NavigationDrawer 没有出现以前, 这个库就已经被普遍使用, 但是到如今这个库已经被放弃了 |
picasso | Picasso 是 Square 公司出品的一款图片缓存库, 主导者是 JakeWharton 大神 |
android-best-practices | Android 开发最佳实践, 里面所介绍的经验都是来自于 Futurice 公司 Android 开发者, 介绍内容有 Android 开发规范, 架构, 布局技巧, 以及使用一些有助于快速开发相关工具等等, 很是适合新手去学习 |
EventBus | EventBus 是 Android 事件管理总线, 使用它能够替带 Android BroadCast, BroadCastReceiver, Handler 在 Activity, Fragment, Service, 线程之间传递消息, 大大简化了事件传递逻辑 |
android-async-http | Android-Async-Http 是 Android 一款老牌异步请求库, 专门对 Android 在 Apache 的 HttpClient 基础上构建的异步 http 链接, 该库有不少特征, 例如: 库的 size 小, 支持文件上传不需使用第三方库支持, 内部使用线程池来处理并发, 等等 |
fresco | Fresco 是 FaceBook 公司出品的一款图片缓存库, Fresco 是一个强大的图片加载组件, 支持加载 Gif 图和 WebP 格式, 支持 Android2.3(API level 9) 及其以上系统, Fresco 中设计了 Image pipeline 和 Drawees 两个模块各施其职, 使得图片完美加载出来, 想知道更多 image pipeline 和 Drawees 有关于它的特性, 能够到它官方平台看介绍 |
zxing | ZXing 是二维码领域中名气最大的开源项目, 它提供了多个平台的二维码 / 条形码扫描解决方案, 拥有扫描快, 识别率高, 使用简单等特色 |
leakcanary | LeakCanary 是 Square 公司出的一款检测内存泄露工具, 该工具能帮助你在开发阶段方便的检测出内存泄露的问题, 使用起来很是简单方便 |
butterknife | 由 JakeWharton 大神开发出来的, ButterKnife 是 View 注入框架, 使用它为了简写不少 findViewById 代码, 同时还支持 View 的一些事件处理函数 |
MPAndroidChart | MPAndroidChart 是一款强大的 Android 图表库, 支持各类各样图表显示, 能想到的图表样式这里几乎都有, 图表还支持选择, 拖放和缩放动画效果 |
ActionBarSherlock (不建议使用) | ActionBarSherlock 这个库是 JakeWharton 大神开发出来支持 Android3.0 如下版本的, 后来慢慢的 Google 也提供了 AppCompat 库来支持 Android3.0 如下版本使用 ActionBar, 所以做者不建议咱们再使用这个库了 |
androidannotations | AndroidAnnotations 是一个可以让你快速进行 Android 开发的开源框架, 它能让你专一于真正重要的地方, 使代码更加精简, 使项目更加容易维护, 它的目标就是 "Fast Android Development.Easy maintainance" |
ViewPagerIndicator | 由 JakeWharton 大神开发出来的一个 ViewPager 指示器, 使用起来简单方便, 可高度定制, 开发出各类各样动画效果 |
glide | Glide 是 Google 员工的开源项目, 普遍应用于 Google 一些 App 上, 在 2014 年 Google I/O 大会上被推荐使用, Glide 和 Picasso 被人拿来比较研究过, Glide 与 Picasso 有 90% 的类似度, 但在一些细节上仍是有点区别的, 各有各优缺点看君选择 |
HomeMirror | 开发者是由一名程序媛 Hannah Mittelstaedt , HomeMirror 是一款 Android 镜子应用, 目前它能实现日期, 时间, 天气, 生日信息, 事件提醒器, 骑车天气的推荐, 股票信息, XKCD 漫画网站的新帖等等 |
Android-PullToRefresh(不建议使用) | 一个强大的拉动刷新开源项目, 支持各类控件下拉刷新, ListView, ViewPager, WebView, ExpandableListView, GridView, ScrollView, Horizontal ScrollView, Fragment 上下左右拉动刷新, 不过如今这个项目已经中止维护更新了, 推荐使用 Android-Ultra-Pull-To-Refresh |
MaterialDesignLibrary | 这个库控件都是遵循了 Google Material Design 设计规范开发出来, 例若有: Flat Button, Rectangle Button, CheckBox, Switch, Progress bar circular indeterminate 等等 |
PhotoView | PhotoView 是 ImageView 的子类, 支持全部 ImageView 的源生行为, 例如: 支持 Pinch 手势自由缩放, 支持双击放大 / 还原, 支持平滑滚动等等, 而且很是方便的与 ImageLoader/Picasso 之类的网络图片读取库集成使用, 还方便的与 ViewPager 等一样支持滑动手势的控件集成 |
RxAndroid | 由 JakeWharton 大神主导开发的项目, RxAndroid 是 RxJava 的一个针对 Android 平台的扩展, 主要用于 Android 开发 |
未完待续