1 概述
在Android的安全里面,有很大一部分的是组件的安全,有时候自认为对组件安全已经有比较深的理解,但是回过头去看了一下,还是有点疑问,问了几个人,没有得到答案,周末就自己研究一下
当年乌云很火的帖子–Activity安全里面有一句话,是这么写的:
这里当时看的时候也没太注意,直到最近又回顾的时候,才发现:Activity到底在什么时间才会造成信息泄露,又是如何进行攻击才能获得敏感信息?
还有个英文的版本,文章讲的很不错,也有不少案例:
Using Technology in a Safe Way
2 基础知识
2.1 Android Activity的四种Task方式
模式 | 描述 | 首次启动入口函数 | 二次启动 |
---|---|---|---|
standard | 默认行为。每次启动一个activity,系统都会在目标task新建一个实例。 | onCreate | onCreate |
singleTop | 如果目标activity的实例已经存在于目标task的栈顶,系统会直接使用该实例,并调用该activity的onNewIntent()(不会重新create) | onCreate | 栈顶时onNewIntent |
singleTask | 在一个新任务的栈顶创建activity的实例。如果实例已经存在,系统会直接使用该实例,并调用该activity的onNewIntent()(不会重新create) | onCreate | onNewIntent |
singleInstance | 和"singleTask"类似,但在目标activity的task中不会再运行其他的activity,在那个task中永远只有一个activity。 | onCreate | onNewIntent |
2.2 使用standard和singleTask验证一下入口函数
验证方法:
同时根据Activity生命周期看一下Log情况
APP1的Source:
public void SendIntentToActivity(View view) {
Log.d(TAG,"SendIntentToActivity");
Intent mIntent = new Intent();
mIntent.setAction("com.test.activitytest2_test");
startActivity(mIntent);
}
APP2的Source仅标注几个重要的函数:
public class SecondActivity extends AppCompatActivity {
private static final String LOGTAG = "Activitytest2TestSecondActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d(LOGTAG,new Throwable().getStackTrace()[0].getMethodName());
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
}
@Override
protected void onNewIntent(Intent intent) {
Log.d(LOGTAG,new Throwable().getStackTrace()[0].getMethodName());
super.onNewIntent(intent);
}
@Override
protected void <