Application 基础

来源:互联网 发布:linux端口重定向 编辑:程序博客网 时间:2024/05/21 05:43

apk 全称是an Android package.其后缀名是以.apk结束的.每一个apk都有自己的security sandbox.

(1):每一个apk 代表一个Linux user用户,Linux 系统会给每个apk分配一个唯一的id,只有系统知道这个id,其他app不知道这个id.系统会给apk里面的每个文件设定一个权限,只有用于这个id的app才能访问,也就是只能apk里面的文件,只能被这个apk访问,不能被其他apk访问.

(2):每一个进程拥有自己的虚拟机,这样不同apk运行的环境是隔离的。一个apk crash掉,不用影响其他apk的运行.

(3):每一个apk 都有自己的进程,当这个apk开始运行的时候,Android 会启动这个进程,当apk停止运行的时候,Android 会shut down 这个进程。还有一种情况就是当Android memory不足的时候,系统可能会shut down 优先级比较低的进程以回收memory.

本质上app 运行在独立的环境中,但是有一些方法可以在不同的apk之间share 资源,或者让app访问系统资源。

(1):假如两个apk之前有相同的user id,则可以share资源。

(2):可以在apk的manifest文件中要求某些权限,例如方位网络等,这部分后面有详述。

APP 有activity,service,content provide,broadcast receive 组成。当apk 创建和销毁的时候每一种组件都有自己的purpose,lifecycle。

(1):每一个activity 代表一个可以和用户交互的screen,activity 之前互相独立,可以互相调用。其设计遵循高内聚,低耦合的设计思想。

(2):service 主要用于要长期运行在后台,或者work for remote process,service不能和用户交互.

(3):content provide 主要用于app之间share data.

(4):broadcast receive 主要用于解释系统的广播通知.

其中activity,service,broadcast receive 可以被intent 激活,content provide 只能被来自content resolve的request 激活。

可以通过startActivity(Intent)或者startActivityforResult(intent)来开始一个activity.

可以通过startService(Intent)或者bindService(Intent)方式开始一个service.

可以通过sendBrocast(),sendOrderBroadCast(),sendStrickBrocast()的方式发送一个broadcast.

可以通过contentResolve.query()的方式获得一个content provide.

所有的组件都要在manifest文件中静态声明,broadcast 可以java中动态注册.apk 所需要的权限也需要在manifest文件中声明例如:android:name="android.hardware.camera.any"。必须声明apk支持的sdk的版本,uses-sdk android:minSdkVersion="7" android:targetSdkVersion="19"



0 0
原创粉丝点击