精华内容
下载资源
问答
  • 安卓开发这么多年后,我觉得有必要认真分析一下,启动一个app 都走了什么流程 。1. android app 进程基础理论1.1 每个Android App都在一个独立空间里, 意味着其运行在一个单独进程中, 拥有自己VM, 被系统...

    我们平时在手机桌面上点击一个app 图标, 就能启动一个app应用。从用户角度来看,这个过程看起来很简单,但是它的背后又隐藏着什么玄机 ? 在做安卓开发这么多年后,我觉得有必要认真的分析一下,启动一个app 都走了什么流程 。

    1. android app 进程基础理论

    1.1 每个Android App都在一个独立空间里, 意味着其运行在一个单独的进程中, 拥有自己的VM, 被系统分配一个唯一的user ID。

    1.2 Android App由很多不同组件组成, 这些组件还可以启动其他App的组件. 因此, Android App并没有一个类似程序入口的main()方法。

    Android进程与Linux进程一样. 默认情况下, 每个apk运行在自己的Linux进程中. 另外, 默认一个进程里面只有一个线程---主线程. 这个主线程中有一个Looper实例, 通过调用Looper.loop()从Message队列里面取出Message来做相应的处理.

    那么, 这个进程何时启动的呢?

    简单的说, 进程在其需要的时候被启动. 任意时候, 当用户或者其他组件调取你的apk中的任意组件时, 如果你的apk没有运行, 系统会为其创建一个新的进程并启动. 通常, 这个进程会持续运行直到被系统杀死。

    关键是: 进程是在被需要的时候才创建的。

    2. 启动流程

    关于Android的应用进程在android guide中有这样的一段描述:

    By default, every application runs in its own Linux process. Android starts the process when any of the application’s components need to be executed, then shuts down the process when it’s no longer needed or when the system must recover memory for other applications.

    每一个android应用默认都是在他自己的linux进程中运行。android操作系统会在这个android应用中的组件需要被执行的时候启动这个应用进程,并且会在这个应用进程没有任何组件执行或者是系统需要为其他应用申请更多内存的时候杀死这个应用进程。所以当我们需要启动这个应用的四大组件之一的时候如果这个应用的进程还没有启动,那么就会先启动这个应用程序进程。

    用户点击Home上的一个App图标, 启动一个应用时:

    910df9643d8c

    851999-a9c2c456c9f91596.jpg

    Click事件会调用startActivity(Intent), 会通过Binder IPC机制, 最终调用到ActivityManagerService. 该Service会执行如下操作:

    第一步通过PackageManager的resolveIntent()收集这个intent对象的指向信息.

    指向信息被存储在一个intent对象中.

    下面重要的一步是通过grantUriPermissionLocked()方法来验证用户是否有足够的权限去调用该intent对象指向的Activity.

    如果有权限, ActivityManagerService会检查并在新的task中启动目标activity.

    现在, 是时候检查这个进程的ProcessRecord是否存在了.

    如果ProcessRecord是null, ActivityManagerService会创建新的进程来实例化目标activity.

    2.1 创建进程

    ActivityManagerService调用startProcessLocked()方法来创建新的进程, 该方法会通过前面讲到的socket通道传递参数给Zygote进程. Zygote孵化自身, 并调用ZygoteInit.main()方法来实例化ActivityThread对象并最终返回新进程的pid.

    ActivityThread随后依次调用Looper.prepareLoop()和Looper.loop()来开启消息循环.

    流程图如下:

    910df9643d8c

    851999-b6b5dacf9d1488f9.jpg

    2.2 绑定Application

    接下来要做的就是将进程和指定的Application绑定起来. 这个是通过上节的ActivityThread对象中调用bindApplication()方法完成的. 该方法发送一个BIND_APPLICATION的消息到消息队列中, 最终通过handleBindApplication()方法处理该消息. 然后调用makeApplication()方法来加载App的classes到内存中.

    流程如下:

    910df9643d8c

    851999-32893aaf343caeac.jpg

    2.3 启动Activity

    经过前两个步骤之后, 系统已经拥有了该application的进程. 后面的调用顺序就是普通的从一个已经存在的进程中启动一个新进程的activity了.

    实际调用方法是realStartActivity(), 它会调用application线程对象中的sheduleLaunchActivity()发送一个LAUNCH_ACTIVITY消息到消息队列中, 通过 handleLaunchActivity()来处理该消息.

    假设点击的是一个视频浏览的App, 其流程如下:

    910df9643d8c

    851999-9f76d2f18051881c.jpg

    在其他博客上看到对于启动流程的总结,感觉比较通俗易懂

    大家都知道 Android是基于Linux系统的,而在Linux中,所有的进程都是由init进程直接或者是间接fork出来的,当我开机的时候init进程就会fork出一个Android的第一个新的进程Zygote,中文翻译过来要”受精卵”,一个很有意识的名字。为什么这么说呢,当我们Zygote进程跑起来后,Android为了实现实现资源共用和更快的启动速度,通过Zygote进程直接去fork出一些子进程,这就是为什么要”受精卵”的原因,也就是我们的app全部都是基于Zygote上的 ,没有Zygote就没有我们,当Zygote初始化完成之后,首先会fork它的第一个子进程SystemServer,这个类非常的重要,为什么这么说呢?因为系统里面重要的服务都是在这个进程里面开启的,比如ActivityManagerService、PackageManagerService、WindowManagerService等等,有木有觉得似曾相识当SystemServer跑起来后,这些重要的服务也会随之创建,系统初始化完成之后我们就会进到系统桌面->Launcher,其实Launcher也是一个app,它继承自Activity,当我们点击桌面上的app后,系统就会为我们的app创建一个进程,然后启动我们App的第一个类ActivityThread其实说到底我们的app就是一个main函数,也就是启动了ActivityThread.main()。我们重点来看下这个类

    参考文档

    展开全文
  • 4 关于动画,建个3D模型怎样成动画并在我自己编的app里面显示的呢?有什么书籍或者例子可以参考的吗? 求教各位大神了,我对于这些真的完全不懂,但是毕设题目已经联系老师了,老师让我做出ppt来,我觉得我只有...
  • Android 10 App 启动流程

    2021-02-06 15:39:55
    源码,就重新追一遍并且画一画相关的流程图。 2. 从点击桌面图标开始 Android 桌面本身也是一个 APP,为 Launcher。由于 Android 是开源,很多手机厂商都了相关修改,甚至重新一个新启动页。之前...

    https://blog.csdn.net/zzw0221/article/details/106716620
    https://blog.csdn.net/u010263943/article/details/109119898
    https://blog.csdn.net/RQ997832/article/details/103259608

    展开全文
  • App SDK配置中勾选定位和地图服务(注意:部分国产Android手机可能必须勾选才能获取位置,看下),但是项目中地图功能却没法用 我在高德地图申请了key,也在manifest.json --> App SDK中填写了,但是却并...

    这个也是我在做uniapp混合app时遇到的问题,也是困惑了几天,网上也有很大相关文章,但是有些地方有些不清晰,让新手很困惑。

    问题原因

    我在项目中碰到两个问题

    1. 如果只需要用定位功能获取到经纬度坐标的,可以不用在manifest.json --> App SDK配置中勾选定位和地图服务(注意:部分国产Android手机可能必须勾选才能获取位置,看下图),但是项目中的地图功能却没法用
    2. 我在高德地图申请了key,也在manifest.json --> App SDK中填写了,但是却并没有生效,打包完连基本的经纬度都获取不到了,但是地图貌似能用,哈,这应该是大多数人遇到的问题

     

    解决方法

    解决方法就是,申请高德或者百度的key,在manifest.json --> App SDK中勾选地图和定位服务,在App模块权限配置中勾选Maps,这样我们可以获取更多的位置服务权限。

     

     

     

     

     

    怎么在高德地图申请key

    其实主要的问题是出在这里,大多数人配置完这个在app上还不生效,就是因为申请key时填的包名和云打包时填写的不一致造成的

    下面写一下申请流程

    • 注册高德开放平台会员
    • 创建新应用

     

     

    • 在应用下创建key

     

    这里安全码SHA1,我们可以用官方给的  BA:AD:09:3A:82:82:9F:B4:32:A7:B2:8C:B4:CC:F0:E9:F3:7D:AE:58

    在DCloud公用证书主要信息中有,如下

    复制代码

    Alias name: hbuilder  
    Creation date: 2014-9-29  
    Entry type: PrivateKeyEntry  
    Certificate chain length: 1  
    Certificate[1]:  
    Owner: CN=DH, OU=数字天堂(北京)网络技术有限公司, O=数字天堂(北京)网络技术有限公司, L=海淀, ST=北京, C=86  
    Issuer: CN=DH, OU=数字天堂(北京)网络技术有限公司, O=数字天堂(北京)网络技术有限公司, L=海淀, ST=北京, C=86  
    Serial number: 5174dc8b  
    Valid from: Mon Apr 22 14:45:31 CST 2013 until: Sun Aug 23 14:45:31 CST 3012  
    Certificate fingerprints:  
             MD5:  59:20:1C:F6:58:92:02:CB:2C:DA:B2:67:52:47:21:12  
             SHA1: BA:AD:09:3A:82:82:9F:B4:32:A7:B2:8C:B4:CC:F0:E9:F3:7D:AE:58  
             SHA256: D7:5C:1F:A2:B9:AE:86:7C:E6:88:A8:AD:C6:DE:AC:7C:D6:BA:96:F4:3A:75:1F:D1:0A:20:0F:A5:97:4A:C6:36  
    Signature algorithm name: SHA1withRSA  
    Subject Public Key Algorithm: 1024-bit RSA key

    复制代码

    详细请看 Android平台云端打包证书使用说明

     

    说一下包名PackageName,大部分人会在这里出错,因为有格式限制,我们一般写这种格式io.dcloud.hbuilder这种格式,但是不管写成什么,一定要和App云端打包时的安卓包名一致,注意,一定不要写成uniapp的appID(__UNI_FDXXXXX)

     

     

     

     

    •  将生成的key填写到manifest.json --> App SDK配置中
    展开全文
  • app开发流程与demo

    千次阅读 2017-03-27 11:36:15
    大二开始SRT,是一个时间记录的app的很简单这里简单的记录一下 app主要集合了时间记录,分析,查看记录,下步规划以及用户体验的一些功能,包括分享到第三方平台,手机验证码登录

    大二开始做SRT,是做一个时间记录的app,做的很简单这里简单的记录一下
    app主要集合了时间记录,图分析,查看记录,下步规划以及用户体验的一些功能,包括分享到第三方平台,手机验证码登录


    1.前期准备工作
    1.1 确认需求
    大学生普遍存在时间观念不强,不能合理的安排时间,对未来有明确的时间规划,项目采用
    随身携带的智能终端帮助大学生有效的记录时间分配,合理的规划时间安排。

    1.2 app操作流程及功能规划
    通过线框图规划app的操作执行界面,设计app的主要功能,分为注册登录,时间记录,
    查看记录,图表分析,下步规划等功能,设计UI界面,仿微信6.0的主界面来设计本项目的
    主界面,收集UI素材

    1.3 开发知识的储备
    以已有的java知识为储备,学习Android开发的基本步骤,方法,框架,学习云服务器
    交互方法,了解云服务器端开发文档,学习基本的UI设计模板

    1.4 数据库的设计
    根据项目需要通过E-R图来设计所需的表与表中属性,了解云端数据库的交互方法,数据
    库共有四个表:user(用户)表,plan(用户计划)表,records(用户总记录)表,dayrecords
    (用户每天记录)表
    User(username,password,mobilePhone,emailVerified,email)
    Plan(username,email,main,level,freelessonnum)
    Records(username,email,activity_time,sport_time,study_time,fun_time,
    activity_per,sport_per,study_per,fun_per,freelesson_time)
    Dayrecords(username,date,week,xiangmu,start_hour,end_hour)


    这里写图片描述


    2.项目开发阶段
    2.1 项目结构设计与数据操作
    App分为三层:
    (1)视图层:用户的操作. 视图对象的主要目的之一是将应用模型对象中的数据显示出来,
    并允许用户编辑该数据
    (2)控制器层:控制器层是在视图层和若干个模型层的中间人,负责响应视图层并操作模
    型层
    (3)模型层:封装了应用的一系列数据, 并定义了操作, 处理这些数据的逻辑和计算规则。
    数据来源于用户输入与服务器反馈,格式为Json,操作在视图层完成,处理在模型层完成,
    最终存储到云端服务器。
    2.2 项目开发环境选择

    采用Android 6.0版本的SDK,使用Android Studio1.5.1为开发工具,云端服务器采用
    Bmob云服务器,对应SDK为bmob-sdk:3.5.0、bmob-sms:1.0.1

    2.3.项目开发
    根据前期规划与设计,完成对App的开发,并对每个模块相应功能进行单独测试,最终将
    各个模块组合,完成app的开发,项目结构流程图如下


    这里写图片描述


    2.4 主要功能介绍
    2.4.1用户记录相关功能
    主要包括用户设置相应的时间记录计划,进行时间的记录,查看记录,查看过去记录的
    图分析,对用户过去的时间分配进行简单的建议与规划,查看计划完成情况与各项活动所
    占的百分比,修改计划
    2.4.2 用户体验相关功能
    主要包括用户的注册与登录,手机验证码登录,忘记密码时的找回,修改资料,分享到
    第三方平台
    3.项目测试阶段
    3.1 测试环境
    3.1.1 硬件环境
    硬件名称 数量 配置
    三星Galaxy S5 1 分辨率1920 x 1080 RAM 2GB 核心数 4
    Genymotion模拟器 1 同上

    3.1.2 软件环境
    Android OS 4.2.2

    3.2 测试中出现的问题
    存在问题 解决方法
    1.云端服务器查询数据不同步 Handler异步查询
    2.实际记录数据与服务器数据不一致 重复提交bean导致,采用sharedpreferences暂时存储
    3.主页面fragment崩溃重叠 采用底色填充
    4.其他编码漏洞 修改

    3.3 项目存在问题
    对android底层结构不熟悉,对activity与fragment生命周期认识不足,主页面崩溃问题
    重叠问题解决不彻底,app启动卡顿明显,暂时采用载入页面背景透明掩盖,主要由于项目成
    员对android了解不足,底层框架认识不清导致

    3.4 项目发布
    目前项目已在应用宝发布,版本更新依托蒲公英第三方代码托管平台


    项目中用到的几个服务器和第三方接口以及Github上的几个开源UI
    Bmob云服务器:http://www.bmob.cn/
    第三方分享平台:http://www.mob.com/
    github上的开源UI:
    Hellocharts图表库:https://github.com/lecho/hellocharts-android
    Context-Menu.Android:https://github.com/Yalantis/Context-Menu.Android
    这里写图片描述
    circular-progress-button:https://github.com/dmytrodanylyk/circular-progress-button
    这里写图片描述
    android-floating-action-button:https://github.com/futuresimple/android-floating-action-button这里写图片描述


    项目是简单的一个练手app做的有很多不足之处,但是对初学者可能有很多帮助,尤其是用Bmob平台开发app的开发者,项目地址
    https://github.com/yaoxunji/app

    展开全文
  • 现在有时间,也下载了 Android 10 源码,就重新追一遍并且画一画相关的流程图。 2. 从点击桌面图标开始 Android 桌面本身也是一个 APP,为 Launcher。由于 Android 是开源,很多手机厂商都了相关修改,...
  • 写数学流程图代码matlab DAS-Android-应用 用于在线驾驶员咨询系统 Android 应用程序 介绍 在您开始在 Android 手机上进行开发之前,需要几件事。 首先,必须启用USB调试选项。 这可以在手机的开发者选项中激活...
  • 在开始一个项目时候,究竟需要准备些什么前期工作呢,在外包公司中,又是一个怎么样开发步骤呢?下面,按照我理解,说一下。 项目流程图 看上图,从左往右,如果我们仅是一名开发...APP开发流程图: ...
  • 最近公司要求做APP的性能测试,尝试网上所有方法,整崩溃了还是没有有弄好,手机连接代理,但是录制时候有些接口就是抓不到,流程接口抓不全,导致数据插入不到数据库。后来直接撇开LoadRunner,只对Fiddler...
  • 在开始之前,我想先对各位没过微信支付人吐槽一下,——————–...废话不多讲,首先放一波官方支付流程图,还是那句话,一定要认真看流程图,这样对你业务逻辑处理有很大提升。 知道了支付大致流...
  • 1. 各个屏幕的手机,怎么图片资源适配? 图片在制作时候要按照哪种分辨率设计? 2.style 是怎么用? 3. 怎样加快界面制作流程?怎样快速制作出界面?
  • 目前移动互联网很发达,而且很多人都喜欢收看新闻,所以我们从用户角度出发,开发一款实用便捷的APP。目的是给用户带来全新的体验。本项目的创新之处在于给客户个性化的体验,客户可以根据个人兴趣和习惯设置新闻...
  • 但是轮播和itemview显示数据是一样,此次我们要做的就是把轮播和itemview数据分离。大体思路就是把比如一共提取7条数据,让前三条显示轮播,后四条显示itemview,这样数据就不会一样了。好了,接下来...
  • 讲讲移动测试的流程

    2016-03-03 08:30:00
    1.待测试的APP、产品需求文档、产品原型、接口说明文档以及设计说明文档等产品相关内容。2.测试所需相关设备如PC、APP相应系统相应版本的手机等。3.测试计划流程表及相应测试人员。 测试用例准备 4.根据产品需求文...
  • 以前未曾具体得App开发,现在大致了解了开发所包含基本元素。 如上,在Layout目录下可以使用xml语法进行UI设计,可以直接拖动几个简单元素进行操作。 在MainActivity.cs页面可以进行逻辑编码。 入口...
  • 1.待测试的APP、产品需求文档、产品原型、接口说明文档以及设计说明文档等产品相关内容。 2.测试所需相关设备如PC、APP相应系统相应版本的手机等。 3.测试计划流程表及相应测试人员。 测试用例准备。 ...
  • App启动,相信大家都是非常熟悉了,那为何我们需要对App启动优化呢,这里就要先对我们Android 从开机到启动我们的App进入主页面这一流程一个简单的阐述了. 一、Android启动流程 我们先来看一张流程图 首先呢,...
  • 1.待测试的APP、产品需求文档、产品原型、接口说明文档以及设计说明文档等产品相关内容。   2.测试所需相关设备如PC、APP相应系统相应版本的手机等。   3.测试计划流程表及相应测试人员。   4.测试用例...
  • 用户在点击手机App的图标时,到底了那些呢? 一个App启动(冷启动)就是启动一个main函数,那么这个main函数在哪里呢? 是哪个类main函数呢? 如上所示,第一次启动时会去加载.class文件;开启一个进程,这...
  • 最近在小程序开发,在其中也遇到了很多坑,获取小程序的手机号并绑定就遇到了一个很傻坑。 流程介绍 官方流程图 小程序使用方法 需要将 <button> 组件 open-type 值设置为 getPhoneNumber,当用户...
  • 菜鸟问一下,像makeblock这样,有手机APP端,可以在手机APP上实现图形化编程,通过蓝牙传输到机器人主板上,执行。这是怎么开发出来?用什么编程语言?流程是怎样
  • 放一个友盟的手机登录流程图 上图可以看出,我们java只需要最后,拿到token后,发起请求,给app端返回个号码就行了 说简单,做的真难 这是友盟开发文档 这是他提供java签名demo 用以上文件,整整弄了一...
  • 流程完善: 任务每一步流程都与订单关联,支付,退款等实现交易体系完善。 14.全新 计件悬赏功能 全新开发计件悬赏支持批量操作;诚信设置;使用道具;流程完善 功能同单人悬赏外,计件采用新倒计中标算法...
  • 现在主要遇到问题是,从来没有接触过照相机对接和二次开发,不知道如果使用手机app来实时获取相机最新照片,重点在照相机对接上,希望有经验大佬给点建议,比如:哪些相机可以支持二次开发,都有什么传输...
  • Android中APK安装流程解析

    万次阅读 多人点赞 2019-06-25 17:51:47
    前言:大家都知道,手机关机以后,就是一个冰冷的砖头,只能用来防身的利器,但是开机后,点击桌面上的任何一个图片,都能开启一个APP,这说明在开机过程中,系统把已经安装好的APP加载到内存中,这到底是怎么的...
  • 新增功能:新增手机app 佳易商城系统使用说明: 解压后将jiayi9文件夹下所有文件上传到空间中即可 使用方法: 后台登录方式:http://网址/admin.asp 用户名:admin 密码:admin 路径:admin   佳易团购...
  • 最近公司突然要写一个拍照的app, 大概流程就是拍照页面→确认所拍照片页面。 由于从来没写过手机APP,就从网上找了个SAMPLE docs.microsoft.com/en-us/samples/xamarin/ios-samples/ios11-avcam/ 然后我现在...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 159
精华内容 63
关键字:

手机做流程图的app