android框架

android App启动过程

▼魔方 西西 提交于 2020-01-28 02:58:31
本文以图文并茂的形式简单介绍一个APP从启动到主页面显示经历了哪些流程,以及实现的原理。不介绍具体源码,仅仅构建一个大体框架。 启动流程: ①点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求; ②system_server进程接收到请求后,向zygote进程发送创建进程的请求; ③Zygote进程fork出新的子进程,即App进程; ④App进程,通过Binder IPC向sytem_server进程发起attachApplication请求; ⑤system_server进程在收到请求后,进行一系列准备工作后,再通过binder IPC向App进程发送scheduleLaunchActivity请求; ⑥App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送LAUNCH_ACTIVITY消息; ⑦主线程在收到Message后,通过发射机制创建目标Activity,并回调Activity.onCreate()等方法。 ⑧到此,App便正式启动,开始进入Activity生命周期,执行完onCreate/onStart/onResume方法,UI渲染结束后便可以看到App的主界面。 上面的一些列步骤简单介绍了一个APP启动到主页面显示的过程

React-Native的基本控件属性方法,对React-Native的学习,从熟悉基本控件开始。

大憨熊 提交于 2020-01-27 14:19:53
对React-Native的学习,从熟悉基本控件开始。 View 属性方法 序号 名称 属性Or方法 类型 说明 1 accessibilityLabel 属性 string 2 accessible 属性 bool 当为true时,表示该元素是可以进行访问, 默认情况下所有可触摸的元素控件都是可以访问的 3 onAccessibilityTap 方法 function 该当accessible为true的时候并且用户对控件View做了一个Tap(轻轻的触摸或者点击)的手势 4 onLayout 方法 function 当组件的布局发生变动的时候,会自动调用下面的方法 :{nativeEvent: { layout: {x, y, width, height}}}。 该事件当重新计算布局的时候会立即进行触发,不过界面可能不会立即刷新, 特别当布局动画正在加载中的时候。 5 onMagicTap 方法 function 当accessible为true的时候,当用户双指点击(Magic Tap)的时候,进行触发 风格样式 在React Native中的Style风格布局,其实和CSS样式有很多相似的地方,这边介绍一下: Style标签 说明 Style标签 说明 FlexBox 弹性布局( 详细点击了解 ) transforms 动画属性( 详细点击了解 )

Android内存优化杂谈

≡放荡痞女 提交于 2020-01-27 05:43:50
Android内存优化是我们性能优化工作中比较重要的一环,这里其实主要包括两方面的工作: 优化RAM,即降低运行时内存。这里的目的是防止程序发生OOM异常,以及降低程序由于内存过大被LMK机制杀死的概率。另一方面,不合理的内存使用会使GC大大增多,从而导致程序变卡。 优化ROM,即降低程序占ROM的体积。这里主要是为了降低程序占用的空间,防止由于ROM空间不足导致程序无法安装。 本文的着重点为第一点,总结概述降低应用运行内存的技巧。在这里我们不再细述PSS、USS等概念与Android应用的内存管理,如对这部分内容感兴趣,可自行阅读文末的参考文章。 内存泄露的检测与修改 内存泄露:简单来说对象由于编码错误或系统原因,仍然存在着对其直接或间接的引用,导致系统无法进行回收。内存泄露,容易留下逻辑隐患,同时增加了应用内存峰值与发生OOM的概率。它属于bug issue,是我们一定要修改的。 下面是造成内存泄露的一些常见原因,但是如何建立一套发现内存泄露、解决内存泄露的闭环方案,才是我们工作的重点。 一. 内存泄露的监控方案 Square的开源库leakcanry是一个非常不错的选择,它通过弱引用方式侦查Activity或对象的生命周期,若发现内存泄露自动dump Hprof文件,通过HAHA库得到泄露的最短路径,最后通过notification展示。 内存泄露判断与处理的流程如下图

GitHub 优秀的 Android 开源项目

♀尐吖头ヾ 提交于 2020-01-27 04:06:54
转自:http://blog.csdn.net/shulianghan/article/details/18046021 主要介绍那些不错个性化的View,包括ListView、ActionBar、Menu、ViewPager、Gallery、GridView、ImageView、ProgressBar及其他如Dialog、Toast、EditText、TableView、Activity Animation等等。    一、ListView android-pulltorefresh 一个强大的拉动刷新开源项目,支持各种控件下拉刷新 ListView、ViewPager、WevView、ExpandableListView、GridView、(Horizontal )ScrollView、Fragment上下左右拉动刷新,比下面johannilsson那个只支持ListView的强大的多。并且他实现的下拉刷新ListView在item不足一屏情况下也不会显示刷新提示,体验更好。 项目地址: https://github.com/chrisbanes/Android-PullToRefresh Demo地址: https://github.com/Trinea/TrineaDownload/blob/master/pull-to-refreshview-demo.apk?raw

03)在 Android 开发中使用常见的 Kotlin 模式

半腔热情 提交于 2020-01-27 01:27:26
在 Android 开发中使用常见的 Kotlin 模式 本主题重点介绍 Kotlin 语言在 Android 开发过程中最有用的一些方面。 使用 Fragment 下面几部分使用 Fragment 示例来突出 Kotlin 的一些最佳功能。 继承 您可以使用 class 关键字在 Kotlin 中声明类。在以下示例中,LoginFragment 是 Fragment 的子类。您可以通过在子类与其父类之间使用 : 运算符来指示继承: class LoginFragment : Fragment ( ) 在此类声明中,LoginFragment 负责调用其超类 Fragment 的构造函数。 在 LoginFragment 中,您可以替换许多生命周期回调来响应 Fragment 中的状态变化。要替换函数,请使用 override 关键字,如以下示例所示: override fun onCreateView ( inflater : LayoutInflater , container : ViewGroup ? , savedInstanceState : Bundle ? ) : View ? { return inflater . inflate ( R . layout . login_fragment , container , false ) } 要引用父类中的函数,请使用

理解 Android Build 系统

爷,独闯天下 提交于 2020-01-26 10:23:50
摘自: https://www.ibm.com/developerworks/cn/opensource/os-cn-android-build/index.html 前言 Android Build 系统是 Android 源码的一部分。关于如何获取 Android 源码,请参照 Android Source 官方网站: http://source.android.com/source/downloading.html 。 Android Build 系统用来编译 Android 系统,Android SDK 以及相关文档。该系统主要由 Make 文件,Shell 脚本以及 Python 脚本组成,其中最主要的是 Make 文件。 众所周知,Android 是一个开源的操作系统。Android 的源码中包含了大量的开源项目以及许多的模块。不同产商的不同设备对于 Android 系统的定制都是不一样的。 如何将这些项目和模块的编译统一管理起来,如何能够在不同的操作系统上进行编译,如何在编译时能够支持面向不同的硬件设备,不同的编译类型,且还要提供面向各个产商的定制扩展,是非常有难度的。 但 Android Build 系统很好的解决了这些问题,这里面有很多值得我们开发人员学习的地方。 对于 Android 平台开发人员来说,本文可以帮助你熟悉你每天接触到的构建环境。

Appium环境搭建(Windows版)

社会主义新天地 提交于 2020-01-26 01:42:27
Appium介绍 Appium是一个开源、跨平台的测试框架,可以用来测试原生及混合的移动端应用。Appium支持iOS、Android及FirefoxOS平台。Appium使用WebDriver的json wire协议,来驱动Apple系统的UIAutomation库、Android系统的UIAutomator框架。Appium对IOS系统的支持得益于Dan Cuellar’s对于iOS自动化的研究。Appium也集成了Selendroid,来支持老android版本。 Appium进行自动化测试的两个好处 (1) Appium在不同平台中使用了标准的自动化APIs,所以在跨平台时,不需要重新编译或者修改自己的应用。这里,跨平台的意思是指可以在不同的系统上用相同的方式编写测试脚本,而不是指用于Android系统的测试脚本可以完全不用修改的应用于iOS系统上。事实上,Android和IOS应用几乎需要独立的进行编写。 (2)Appium支持Selenium WebDriver支持的所有语言,如java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure,或者Perl语言,更可以使用Selenium WebDriver的Api。Appium支持任何一种测试框架。如果只使用Apple的UIAutomation

一、安卓系统架构全面分析

社会主义新天地 提交于 2020-01-25 15:32:44
一、引言 Android系统非常庞大,横跨了多个领域,但整体架构设计清晰。 底层内核空间:以Linux Kernel作为基础。 上层用户空间:由Native系统库、虚拟机运行环境、Framework框架层组成。 通过系统调用( Syscall )连通系统的内核空间与用户空间。对于用户空间主要采用C++和Java代码编写,通过 JNI技术 打通用户空间的Java层和Native层(C++/C),从而连通整个系统。 为了能让大家整体上大致了解Android系统涉及的知识层面,先来看一张Google官方提供的经典分层架构图,从下往上依次分为Linux内核、HAL、系统Native库和Android运行时环境、Java框架层以及应用层这5层架构,其中每一层都包含大量的子模块或子系统。 二、Android架构 android的本质是一个基于Linux上运行的java虚拟机。 首先为了理解安卓系统是怎么工作的,就先来看一下android的系统架构。 其架构大至可以分为五层:linux内核层、HAL层、系统运行库层、应用框架层和应用层,那就先说说这几层。 1.linux kernel层 Android系统是基于Linux内核的,这一层为Android设备的各种硬件提供了底层的驱动(如显示,音频,照相机,蓝牙,WI-FI,电源管理等等),而linux内核作为一个抽象层存在硬件和软件之间

Android各个版本代号及其特性

孤人 提交于 2020-01-25 10:04:31
- Android1.1 2008 年9月发布的Android第一版 - Android1.5 Cupcake (纸杯蛋糕) 2009年4月30日,官方1.5版本(Cupcake 纸杯蛋糕)的Android发布。 主要的更新如下: 1、拍摄/播放影片,并支持上传到Youtube 2、支持立体声蓝牙耳机,同时改善自动配对性能 3、最新的采用WebKit技术的浏览器,支持复制/贴上和页面中搜索 4、GPS性能大大提高 5、提供屏幕虚拟键盘 6、主屏幕增加音乐播放器和相框widgets 7、应用程序自动随着手机旋转 8、短信、Gmail、日暦,浏览器的用户接口大幅改进,如Gmail可以批量删除邮件 9、相机启动速度加快,拍摄图片可以直接上传到Picasa 10、来电照片显示 - Android1.6 Donut (甜甜圈) 2009年9月15日,1.6(Donut 甜甜圈)版本软件开发工具包发布。 主要的更新如下: 1、重新设计的Android Market手势 2、支持支持CDMA网络 3、文字转语音系统(Text-to-Speech) 4、快速搜索框 5、全新的拍照接口 6、查看应用程序耗电 7、支持虚拟私人网络(VPN) 8、支持更多的屏幕分辨率。 9、支持OpenCore2媒体引擎 10、新增面向视觉或听觉困难人群的易用性插件 - Android2.0/2.0.1/2.1

Android数据存储方式

非 Y 不嫁゛ 提交于 2020-01-25 05:02:14
在做项目的时候,常常需要对数据进行保存,Android为我们提供了五种数据存储的方法,分别是: 使用SharedPreferences存储数据 文件存储数据 SQLite数据库存储数据 使用ContentProvider存储数据 网络存储数据 在开发的过程中,我们可以根据需要,选择合适的存储方式,下面对前三种方式进行详细的介绍。 一、使用SharedPreferences存储数据   SharedPreference类提供了一个总体框架,使您可以保存和检索的任何基本数据类型( boolean, float, int, long, string)的持久键-值对(基于XML文件存储的“key-value”键值对数据)。通常用来存储程序的一些配置信息。其存储在“data/data/程序包名/shared_prefs目录下。 1、我们可以通过以下两种方法获取SharedPreferences对象(通过Context) :  getSharedPreferences (String name, int mode)  ->当我们有多个SharedPreferences的时候,根据第一个参数name获得相应的SharedPreferences对象。  getPreferences (int mode)  ->如果你的Activity中只需要一个SharedPreferences的时候使用。