Activity生命周期、启动模式、显隐式意图、杀死进程、杀死所有Activity、安装及反编译
步骤一:生命周期
onCreate():当activity被创建的时候调用,通常会在这个函数中完成activity的初始化操作,如设置布局、初始化视图、绑定事件等
onStart():当activity变成用户可见的时候调用,此时activity还处于不可见状态
onResume():界面获取焦点的时候调用的方法,此时activity一定位于返回栈的栈顶,并且处于运行状态
onPause():界面失去焦点,控件不能得到点击事件,通常在这个函数中将一些消耗CPU的资源释放掉,以及保存一些关键的数据
onStop():界面不可见,在activity完全不可见时调用
onDestroy():activity销毁
onRestart():当用户按Home键返回桌面,并重新进入activity时被调用
步骤二:启动模式
standard启动模式:默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同的Activity叠加。
singletask启动模式:开启一个ActivityB的时候检查任务栈里面是否有这个ActivityB的实例存在,如果存在的话,清空这个任务栈ActivityB上面的所有的Activity,复用这个ActivityB。
singletop启动模式:如果发现任务栈的栈顶已经存在这个Activity,再去开启Activity的时候,就不去重新创建新的Activity而是复用这个栈顶已经存在的Activity。
singleinstance启动模式:开启一个新的任务栈,任务栈里面只有一个Activity的实例存在,如果这个Activity被开启,把这个任务栈放在前面,如果开启了新的别的Activity,则别的Activity所在的任务栈会被放在前面。极端的说,在整个手机的操作系统里面只会有一个实例存在。
附上图,方便理解:
步骤三:显隐式意图
1. 显式意图开启同个应用的界面,第一种方式
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
开启同个应用的界面,第二种方式
Intent intent = new Intent();开启系统自带的应用(开启短信应用)
intent.setClassName(this, "com.handsome.boke.DialogActivity");
startActivity(intent);
Intent intent = new Intent();
intent.setClassName("com.android.mms", "com.android.mms.ui.ConversationList");
startActivity(intent);2. 隐式意图
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
步骤四:杀死进程
1. 添加manifests权限
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>2. 代码编写
int pid = android.os.Process.myPid(); //方式一:只能自杀,不能他杀 android.os.Process.killProcess(pid); //方式二:只能他杀,不能自杀 ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); am.killBackgroundProcesses("com.hensen.DialogActivity");
步骤五:杀死所有Activity
//伪代码
List<Activity> list = new ArrayList<>();//在Application全局变量里面
list.add(this);
for (Activity activity : list) {
activity.finish();
}
list.remove(this);
步骤六:安装及反编译
1. 安装:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addCategory("android.intent.category.DEFAULT");
intent.setDataAndType(Uri.fromFile(new File("文件路径")), "application/vnd.android.package-archive");
startActivity(intent);
2. 反编译:
1. apktool反编译可查看其manifests文件
在apkTool文件夹路径下面打开cmd,输入 apktool d C://....//你需要编译文件.apk
2. Dex2jar反编译可查看源代码
在dex2jar文件夹路径下面打开cmd,输入dex2jar C://....//你需要编译文件.apk,生成一个jar包
3. jd-gui查看反编译源码
在Dex2jar生成的jar包中,在jd-gui.exe打开
apkTool和Dex2jar反编译工具下载