android APP 使用java语言编写。android SDK 工具将你的代码编译为apk:android包,这是一个使用apk作为后缀的档案文件——根据data和resource文件——。这个APk文件包含一个android APP的多有内容,并且anroid设备使用这个文件取安装APP。
一旦被安装在设备上,每一个android APP存在于它自己的安全区域:
android OS是一个多用户的linux系统,每一个APP是一个不同的用户。
默认情况,系统为每一个APP分配一个独一无二的linux用户ID.系统为APP里面的文件设置权限,使得分配给APP的唯一的用户ID有权限使用他们。
每一个APP有它自己的java 虚拟机。一个APP的代码运行和其他的APP是分开的
一般,每一个APP运行在他自己的linux进程中。android启动进程,当APP的组建需要被执行的的时候;然后关闭进程,当它不再需要或者系统必须为其他APP获取内存
总之,android实现的了最小特权原则。一般,每一个APP仅仅可以访问这些它工作需要的组建,不包含其他。这创建了一个非常安全的环境,app不能够访问那些没有给予权限的系统部分。
但是有一些方法可以给一个APP和其他APP共享数据,也可以使得一个APP可以访问系统服务。
可以安排2个app共享用户ID,在这种情况下他们可以互相访问文件。为了节省系统资源,APP有相同的用户ID,运行在相同的进程中和共享相同的虚拟机。这些APP必须使用相同的证书签名。
app可以申请权限去访问设备数据,例如用户的联系人,短信息,挂载的存储sdcard,camera,蓝牙和其他。在安装的时候,所有的APP权限必须被用户授予
涵盖基本要素,一个androidAPP存在于系统中,文档的其他部分向你介绍。
核心框架组建定义你的APP。
在manifest文件里,你可以定义组建和为APP申请设备特性
resources 和你的APP代码分开,允许你的APP针对各类设备很好的优化它的行为。
APP 组建
APP组建是android APP的基本组成模块。每一个组建是一个系统开始的你APP的不同的点。
activityes 单一的用户界面屏幕
services运行在后台,执行长时间的操作和为远程进程执行工作,没有用户界面
content provider 管理共享的数据集合
broadcast receivers 响应系统广播公告
一些用来启动各类组建的方法:
启动activity——传递一个Intent给startActivity()或者startActivityForResult()
启动services——传递Intent给startService()。或者绑定服务 传递Intent 给 bindService()
.
启动Broadcast 传递Intent给 sendBroadcast()
,sendOrderedBroadcast()
, or sendStickyBroadcast()
.。
执行一个查询使用一个contentProvider调用query()方法。
intent使用:
总是在纠结万能的intent使用方法,今天发现了一个有趣的事情。随便写了个测试程序,代码如下:
Intent mIntent = new Intent();
mIntent.setAction(mIntent.ACTION_MAIN);
startActivity(mIntent);
这些写在一个onclick函数里面的,当点击button时运行这些代码,会出现手机上所有应用的一个选择框。
后来,发现在activity类中有一个getIntent()方法,使用这个方法获取当前activity的Intent,将上面的代码中的intent替换为getIntent获取的intent,再次运行代码,会发现没有任何反应。我又尝试修改ACTION,发现代码确实是运行了。
这就可以看出Intent和activity的关联性,一般我们使用startactivity或者一些类似的函数切换界面的时候,使用getIntent方法获取Intent,当需要返回的时候,由于Intent和各个activity关联,我们只要在activity里面设置好action,就可以方便的在不同界面间切换。如果 new一个intent,也可以使用setIntent方法使得Intent和当前的activity关联。一个没有关联的Intent在使用的时候,实在整个android里面找东西,有些超出了范围,这是一个不好管理的变量。