Android的四大组件及组件间通信

如果想对四大组件有深入的了解,那永远不要停留在一些条条干干的SDK API的认识,需要了解他的通讯,他的复用,他的边界问题,这样才会对四大组件有透明的认识.

四大组件简洁

  • Activity

    • 没有Activity 可以显示UI吗?

      可以的,我们可以直接操作view显示,其实Activity 只是为了让这些view 富有逻辑的意义,也就是说Activity 主要是让这些逻辑相关的view 抽象成一个一个相关page,这样就可以使这些page进行前进后退等逻辑行为.
  • Service

    可以理解成一个没有UI的后台耗时的服务.

  • ContentProvite

    Android中资源共享的一种方式.然而对于一些外部app来说资源都是private的,那么ContentProvite为什么可以进行访问到.

    其主要是对于一些permission可以控制的情况下,资源才可以访问到.

  • BroadcastReceiver,

    相当于就是在system level中实现了一个observer(观察者模式)广播的设计模式.主要是为了解决一对多的耦合问题.

Android是基于组件的复用,组件间的边界透明

Android中编程的模型比较特殊,他不是根据进程,也不是根据application,进程和application的边界,都被google故意的去掉了,对于应用开发者说只认识一些组件,组件,组件. 他们直接的通讯都是基于intent,也就是说你只要发布一个Intent 不用在意他到底是如何实现的,这些都交给系统去处理,你只要保证intent 指令的正确性即可.

组件的puclic 和 private

  • android:exported字段
  • exported的default值
  • override default值

组件的permission assignment

  • Securing Activities(Service也是一样)

    Android定义了一些安全的方式来限制特殊activity的启动,如果要start该activity就必须申请对应的权限.

如下面代码如果要启动MyActivity 必须要申请下面权限才可以.

<activity android:name=".MyActivity" android:permission="com.testapp.permission.START_MYACTIVITY">
        <intent-filter>
        </intent-filter>
</activity>

应用安装的安全

应用安装的安全性考虑和调用方式

  • 应用安装(安装/卸载/升级)这个过程是一个高特权/风险的操作.
  • 所以用户必须可知/可控
  • 主流实现方式: 客户智能委派而不能直接操作.
  • 调用安装传统系统模式: 发送intent给系统的Package Install app

下面代码会显示UI告诉用户此时需要安装的app

Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.parse("file://" + apkfile.toString()), "application/vnd.android.package-archive");
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        mContext.startActivity(i);  
  • 特权安装模式:

    系统的Package Install App 内部会调用PackageManagerServiceInstall Package,该操作与android.permission.INSTALL_PACKAGES绑定,而且该permission 的protection level="signature|system",也就是说需要是有同样private key或者系统应用才可以调用.

  • 静默安装:

    所谓的静默安装方式只存在ROOT手机上,开发者可以选择:

    基于pm cmd : pm install-r 静态的安装

应用安装时怎么做UID/GID分配

在安装时应用的UID/GID就已经被系统分配好,并通过PackageManagerService将分配好的UID/GID(都是10000+)存储到Databases里,当你run app时就会从该db从获取它的UID/GID,也就是安装和运行的UID/GID 相同.

PMS与安装详情请点击

Android的四大组件及应用安装安全问题(4)的更多相关文章

  1. android中四大组件之间相互通信

    好久没有写有关android有关的博客了,今天主要来谈一谈android中四大组件.首先,接触android的人,都应该知道android中有四大组件,activity,service,broadca ...

  2. Android深入四大组件(八)广播的注册、发送和接收过程

    前言 我们接着来学习Android四大组件中的BroadcastReceiver,广播主要就是分为注册.接收和发送过程.建议阅读此文前请先阅读Android深入理解四大组件系列的文章,知识重复的部分, ...

  3. Android深入四大组件(四)Android8.0 根Activity启动过程(前篇)

    前言 在几个月前我写了Android深入四大组件(一)应用程序启动过程(前篇)和Android深入四大组件(一)应用程序启动过程(后篇)这两篇文章,它们都是基于Android 7.0,当我开始阅读An ...

  4. Android的四大组件之Activity

    Android的四大组件之Activity Activity:是Android组件中最基本也是最为常见用的四大组件(Activity,Service服务,Content Provider内容提供者,B ...

  5. Android的四大组件

    Android的四大组件:Activity.Service.BroadcastReceiver.Content Provider. Content Provider 属于Android应用程序的组件之 ...

  6. Android开发四大组件概述

    这个文章主要是讲Android开发的四大组件,本文主要分为 一.Activity具体解释 二.Service具体解释 三.Broadcast Receiver具体解释 四.Content Provid ...

  7. Java乔晓松-android的四大组件之一Service(服务的绑定)

    android的四大组件之一Service(服务的绑定) 怎么绑定服务,又怎么解除服务,代码如下: MainActivity.java源码: package com.example.lesson14_ ...

  8. Android深入四大组件(七)Service的绑定过程

    前言 我们可以通过调用Context的startService来启动Service,也可以通过Context的bindService来绑定Service,建议阅读此篇文章前请阅读Android深入四大 ...

  9. Android之四大组件、六大布局、五大存储 总结

    Android之四大组件.六大布局.五大存储 一.四大组件:Android四大组件分别为activity.service.content provider.broadcast receiver.   ...

随机推荐

  1. [LeetCode] Target Sum 目标和

    You are given a list of non-negative integers, a1, a2, ..., an, and a target, S. Now you have 2 symb ...

  2. codevs 3061 质子撞击炮②

    提交地址:http://codevs.cn/problem/3016/ 3016 质子撞击炮 II  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold     题目描 ...

  3. [SDOI2005]反素数

    题目描述 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1,2,4,6 ...

  4. ●BZOJ 3998 [TJOI2015]弦论

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3998题解: 后缀自动机. 当T=0时, 由于在后缀自动机上沿着trans转移,每个串都是互不 ...

  5. hdu2669与hdu1576(扩展欧几里德)

    模板: int Extend_Euclid(int a, int b, int &x, int &y){         if(b == 0){             x = 1; ...

  6. Python中tuple的功能介绍

    Tuple的功能介绍 1. 元祖的两种方法 1. 元祖的内置方法 两个元祖的相加 格式:x.__add__(y)等同于x+y 例如:tu1 = (1,2,3,) print(tu1.__add__(( ...

  7. 动态规划--Kin

    动态规划: 1.最大子序列和 2.LIS最长递增子序列 3.LCS最长公共子序列 4.矩阵连乘 5.数字金字塔 1.最大子序列和 #include<iostream> using name ...

  8. JVM指令集介绍

    转载自:http://glutinit.iteye.com/blog/1263446 延伸参考 JVM接收参数和方法调用 void spin() {    int   i;    for (i = 0 ...

  9. Elasticsearch 学习(一):入门

    一.概念 Elasticsearch 是一个实时分布式搜索和分析引擎.它用于全文搜索.结构化搜索.分析以及将这三者混合使用. 维基百科.英国卫报.StackOverflow.Github 等公司都在使 ...

  10. linux修改root账户的用户名所得的教训

    之前linux服务器的密码被别人改过, 然后叫服务器相关的负责人重置了root账户(服务器负责人在客户所在公司), 重置好之后, 领导叫更改下root 用户名和密码, 于是我二话不说就开始找方法, 找 ...