前言 在本系列上一篇文章Android包管理机制(一)PackageInstaller的初始化中我们学习了PackageInstaller是如何初始化的,这一篇文章我们接着学习PackageInstaller是如何安装APK的.本系列文章的源码基于Android8.0. 1.PackageInstaller中的处理 紧接着上一篇的内容,在PackageInstallerActivity调用startInstallConfirm方法初始化安装确认界面后,这个安装确认界面就会呈现给用户,用户如果想要…
前言 包管理机制是Android中的重要机制,是应用开发和系统开发需要掌握的知识点之一. 包指的是Apk.jar和so文件等等,它们被加载到Android内存中,由一个包转变成可执行的代码,这就需要一个机制来进行包的加载.解析.管理等操作,这就是包管理机制.包管理机制由许多类一起组成,其中核心为PackageManagerService(PMS),它负责对包进行管理,如果直接讲PMS会比较难以理解,因此我们需要一个切入点,这个切入点就是常见的APK的安装. 讲到APK的安装之前,先了解下Pack…
前言        Android系统与其他操作系统有个很不一样的地方,就是其他操作系统尽可能移除不再活动的进程,从而尽可能保证多的内存空间,而Android系统却是反其道而行之,尽可能保留进程.Android这样设计有什么优势呢?又是通过怎样的方法来管理这些被保留的进程的呢?Android用户又该如何正确使用手机从而更好发挥Android系统所特有的优势呢?本文将一一为您解开这些谜团. 本文的主要内容如下:            一.Android进程管理的特殊设计 Linux系统对进程的管理…
转自https://juejin.im/post/5df789066fb9a0161f30580c 现如今,前端开发的同学已经离不开 npm 这个包管理工具,其优秀的包版本管理机制承载了整个繁荣发展的NodeJS社区,理解其内部机制非常有利于加深我们对模块开发的理解.各项前端工程化的配置以加快我们排查问题(相信不少同学收到过各种依赖问题的困扰)的速度. 本文从三个角度:package.json.版本管理.依赖安装结合具体实例对 npm 的包管理机制进行了详细分析. 一.剖析 package.js…
Node.js 的模块机制可以很好地解决业务代码混乱的难题,但对于第三方模块包,就有些力不从心了,因为第三方模块包分散存放在各地,无法集中式管理.这就需要一个包管理机制,在 Node.js 中,Isaac Z.Schlueter 大神创建了 NPM 库,来集中管理这些第三方包. 对于版本管理,很多语言都有类似的管理库,Java 有 Maven,Ruby 有 Gem,它们的出现,都是为了解决依赖包对于项目开发的痛点.NPM 的出现,优雅地解决了痛点,促进了 Node 生态圈的繁荣发展,Node 社…
Golang 包管理机制 1. 历史 在go1.11之前, 并没有官方的包管理机制(Godep算个半官方), 主流的包管理机制有: GoVendor Glide Godep 在go1.11之后, 官方推出了GoModule作为正统的包管理机制, 但在1.13版本之前默认没有开启, 需要使用GO111MODULE=on参数进行开启. 2. 基础概念 在 Go 语言中,我们通过 go get 命令将 GitHub 或者 Google Code 上的代码下载到本地指定目录,然后在开发代码中通过 imp…
Go lang使用包(package)这种概念元素来统筹代码,所有代码功能上的可调用性都定义在包这个级别,如果我们需要调用依赖,那就"导包"就行了,无论是内部的还是外部的,使用import关键字即可.但事情往往没有那么简单,Go lang在包管理机制上走了不少弯路,虽然1.18版本的包管理已经趋于成熟,但前事不忘后事之师,我们还是需要了解一下这段历史. 环境变量 一般情况下,go lang在系统中会依赖两个环境变量,分别是:GOPATH 和 GOROOT,有点类似于Python的解释器…
转载自http://www.miui.com/thread-29268-1-1.html 准备写这个专题之前,心里是有点忐忑的.首先Android内存管理机制相当复杂,想要讲清楚比较困难:其次对于绝大多数用户来说,只关心内存够不够用,至于内存如何管理的这种技术细节,不是用户需要去考虑的,写这样一个专题有没有意义?毕竟我们是用手机,不是来研究手机的.最后的顾虑是这个专题会不会太技术化了,绝大部分用户不会看或者说缺乏相应的背景.但是有一种激励促使着我去写这样一个专题,一直以来,MIUI团队在与用户互…
1 ubuntu包管理机制 跟大家分享一下ubuntu的软件管理机制.如果你们有过: apt-get install 或者 apt-get update 失败的经历. 在众多的apt命令中迷失. 疑惑apt-get update 和 apt-get upgrade 的区别. 想要手动添加源仓库并下载软件 那么本文将带你一步步解决这些问题. 1.1 软件包仓库(Repositories) 1.1.1 sourcelist 文件 在使用apt-get install 和 apt-get update…
一.Linux中的进程管理在Linux中,进程是指处理器上执行的一个实例,可使用任意资源以便完成它的任务,具体的进程管理,是通过“进程描述符”来完成的,对应Linux内核中的task_struct数据结构.进程描述符,包括进程标识.进程的属性.构建进程的资源.一个进程可以通过fork()或者vfork()调用创建出子进程,这些子进程可以访问父进程的地址空间,包括文本段.数据段.堆栈段. 通常情况下,调用fork()的进程处于task_running状态,则fork出来的子进程默认也处于task_…
上篇刚好说到获取到了签名信息,以下进入安装过程,直接上源代码: private void installNewPackageLI(PackageParser.Package pkg, int parseFlags, int scanMode, UserHandle user, String installerPackageName, PackageInstalledInfo res) { // Remember this for later, in case we need to rollbac…
相信一步步走过来的Android从业者,每个人都会遇到OOM的情况.如何避免和防范OOM的出现,对于每一个程序员来说确实是一门必不可少的能力. 今天我们就谈谈在Android平台下内存的管理之道,开始今天的主题之前,先再次回顾两个概念. 内存泄漏:对象在内存heap堆中中分配的空间,当不再使用或没有引用指向的情况下,仍不能被GC正常回收的情况. 多数出现在不合理的编码情况下, 比如在Activity中注册了一个广播接收器,但是在页面关闭的时候进行unRegister, 就会出现内存溢出的现象.通…
npm install 命令 首先总结下npm 安装一个模块包的常用命令. /* 模块依赖会写入 dependencies 节点 */ npm install moduleName npm install -save moduleName npm install -S moduleName /* 模块依赖会写入 devDependencies 节点 */ npm install -save-dev moduleName npm install -D moduleName /* 全局安装模块包 *…
当 Android 应用程序退出时,并不清理其所占用的内存,Linux 内核进程也相应的继续存在,所谓“退出但不关闭”.从而使得用户调用程序时能够在第一时间得到响应. 当系统内存不足时,系统将激活内存回收过程.为了不因内存回收影响用户体验(如杀死当前的活动进程), Android 基于进程中运行的组件及其状态规定了默认的五个回收优先级: IMPORTANCE_FOREGROUND: IMPORTANCE_VISIBLE: IMPORTANCE_SERVICE: IMPORTANCE_BACKGR…
参考文章: http://www.apkbus.com/android-104940-1-1.htmlhttp://blog.sina.com.cn/s/blog_3e3fcadd0100yjo2.html 一.理论: Android采取了一种有别于Linux的进程管理策略,有别于Linux的在进程活动停止后就结束该进程,Android把这些进程都保留在内存中,直到系统需要更多内存为止.这些保留在内存中的进程通常情况下不会影响整体系统的运行速度,并且当用户再次激活这些进程时,提升了进程的启动速度…
概述 从操作系统的角度来说,内存就是一块数据存储区域,属于可被操作系统调度的资源.现代多任务(进程)的操作系统中,内存管理尤为重要,操作系统需要为每一个进程合理的分配内存资源,所以可以从两方面来理解操作系统的内存管理机制. 第一:分配机制.为每一个进程分配一个合理的内存大小,保证每一个进程能够正常的运行,不至于内存不够使用或者每个进程占用太多的内存. 第二:回收机制.在系统内存不足打的时候,需要有一个合理的回收再分配的机制,以保证新的进程可以正常运行.回收的时候就要杀死那些正在占有内存的进程,操…
Centos/Redhat/Fedora的软件包,都是rpm后缀的文件.包管理器rpm(Redhat packages manager)  linux的哲学思想是简单命令解决复杂任务,因此每个软件的功能较单一,所以各种包之间有着复杂的依赖关系,为了解决这种可以使用前端工具: 前端管理工具,自动解决依赖关系. 01.rpm包命名格式 二进制格式 name-VERSION.tar.gz VERSION的格式: major.minor.release.os.arch arch:i386,x64(amd…
#Node # node 一.安装nodejs 下载地址:http://nodejs.cn/download/ 二.安装git 下载地址:https://git-scm.com/download/win git clone ->克隆  下拉代码  git clone + 仓库地址  (master:主分支 切换到开发分支) git status  -> 查看本地文件修改记录 修改了哪些文件 git diff -> 查看具修改了的内容 查看具体修改了哪些内容 git add . ->…
转载自:http://blog.csdn.net/anlegor/article/details/23398785 Android内存管理机制: Android内存管理主要有:LowMemory Killer机制,Ashmem,PMEM/ION及Native内存和Dalvik内存管理管理和JVM垃圾回收机制. LowMemory Killer机制: 源码位置drivers/staging/Android/lowmemorykiller.c Android是一个多任务系统,也就是说可以同时运行多个…
Pipenv旨在将最好的包管理机制(bundler, composer, npm, cargo, yarn等等)带到Python中去. 它会为你的项目自动创建和管理virtualenv,也会在安装和移除包时自动同步Pipfile,还生成了Pipfile.lock文件描述了固定版本,以便在生产环境中构建. Pipenv主要解决了以下问题: 我们不需要分开使用pip和virtualenv,现在他们被合并了. 维护requirements.txt有时也会遇到一些问题,Pipenv使用Pipfile和P…
前言: 最近突然喜欢上一句诗:"宠辱不惊,看庭前花开花落:去留无意,望天空云卷云舒." 哈哈~,这个和今天的主题无关,最近只要不学习总觉得生活中少了点什么,所以想着围绕着最近面试过程中讨论比较多的一个知识点Android 6.0 权限适配问题来进行学习,不过我不想直接进入这个主题,所以选择先去了解一下Android的Permission权限机制及使用 权限管理相关博客: Android权限管理之Permission权限机制及使用 Android权限管理之Android 6.0运行时权限…
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8046659 在前文中,我们分析了SurfaceFlinger服务的启动过程.SurfaceFlinger服务在启动的过程中,会对系统的硬件帧缓冲区进行初始化.由于系统的硬件帧缓冲区一般只有一个,并且不是谁都可以随便访问的,因此,它就需要由一个服务来统一管理.在Android系统中,这个服务便是SurfaceFlinger.在本文中,我们就详细分…
 一.功能 窗口管理是ANDROID框架一个重要部分,主要包括如下功能: )Z-ordered的维护 )窗口的创建.销毁 )窗口的绘制.布局 )Token管理,AppToken )活动窗口管理(FocusWindow) )活动应用管理(FocusAPP) )输入法管理 )系统消息收集与分发 这些功能主要由一个窗口管理服务和相应的客户端来实现的,客户端通过BINDER机制与服务实现交互.       窗口管理服务端负责主要的窗口管理功能,由一个WindowManagerService服务及相关…
虚拟机很小,空间很小,谈谈移动设备的虚拟机的大小限制 16M ,谈谈加载图片的时候怎么处理大图片的,outmemoryExceptionBitmapFactory.option 垃圾回收,没有引用的对象,在某个时刻会被系统gc掉 . Dalvik和标准Java虚拟机(JVM)首要差别Dalvik 基于寄存器,而 JVM 基于栈.基于寄存器的虚拟机对于编译后变大的程序来说,在它们执行的时候,花费的时间更短.Dalvik和Java运行环境的区别1:Dalvik主要是完成对象生命周期管理,堆栈管理,线…
 一.功能 窗体管理是ANDROID框架一个重要部分,主要包含例如以下功能: )Z-ordered的维护 )窗体的创建.销毁 )窗体的绘制.布局 )Token管理,AppToken )活动窗体管理(FocusWindow) )活动应用管理(FocusAPP) )输入法管理 )系统消息收集与分发 这些功能主要由一个窗体管理服务和对应的client来实现的,client通过BINDER机制与服务实现交互.       窗体管理服务端负责基本的窗体管理功能,由一个WindowManagerServ…
随着大家收货后会有很多乐粉晒内存,为啦方便大家,在网上搜集了一些相关Andriod管理的相关机制合理管理内存,整理下发个贴. 首先要知道Android系统是基于Linux 2.6内核开发的开源操作系统(linux是啥都不知道自己去百度吧),而linux系统的内存管理有其独特的动态存储管理机制.不过Android系统对Linux的内存管理机制进行了优化,Linux系统会在进程活动停止后就结束该进程,而Android把这些进程都保留在内存中,直到系统需要更多内存为止.这些保留在内存中的进程通常情况下…
.Android 6.0运行时主动请求权限 3.1  检测和申请权限 下面的例子介绍上面列出的读写SD卡的使用例子,可以使用以下的方式解决: public boolean isGrantExternalRW(Activity activity) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && activity.checkSelfPermission( Manifest.permission.WRITE_EXTERNAL_…
1.当一个类被第一次使用时,它需要被类加载器加载,而加载过程涉及以下两点: (1)在加载一个类时,如果它的父类还未被加载,那么其父类必须先被加载: (2)当类加载到内存之后,按照在代码中的出现顺序执行它的静态变量和静态块(如果有的话). 2.调用一个类的构造函数时,调用过程涉及以下三点: (1)调用父类的构造函数: (2)按照在代码中出现顺序初始化实例数据域和实行实例块: (3)执行其构造函数体. 总结: JAVA类首次装入时(包括类点静态方法和点静态变量或者new一个对象点实例方法和点实例变量…
最近在自己写一个APP,有一个模块需要获取手机应用的一些信息.坑还是有,但都基本踩过了,自己把他实现了出来,实现方法还是很需要掌握的.底部弹出的对话框中四个选项的实现不多做说明,主要讲讲如何获取这些安装的应用信息.好了,不多说,看看效果图: 获取手机安装应用信息: 1.写一个JavaBean,用于存放应用信息,生产get,set方法. public class AppBean { private Drawable appIcon; private String appName; private…
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8577789 在Android系统中,Activity组件在启动之后,并且在它的窗口显示出来之前,可以显示一个启动窗口.这个启动窗口可以看作是 Activity组件的预览窗口,是由WindowManagerService服务统一管理的,即由WindowManagerService服务负责 启动和结束.在本文中,我们就详细分析WindowManag…