一、android的生命周期
android的生命周期可以理解为activity的生命周期,其实一个activity即使一个手机的交互页面,activity的生命周期可以用七个方法表述,activity启动后以栈的形式保存,先打开的activity在栈低,后打开的在栈顶,所以后打开的先出来。
onCreate(Bundle savedInstanceState), 初始化界面
onStart()启动
onRestart() 挂起之后重新启动
onResume() 展示
onPause(); 挂起
onStop(); 停止
onDestory(); 销毁
下图对activity的生命周期做了一个详细的展示,主要有三个过程
完整的流程为:
onCreate --》onStart()-->>onResume()-->>onPause()-->>onStop()-->>onDestory()
activity被从可见到不可见的过程
onResume()-->>onPause()-->>onStop()
不可见到可见的过程
onStop()-->>onRestart()-->>onStart()
二、android中数据的传递
1、使用全局变量传递数据,声明一个java类 Test.java,继承android.app.Application;然后再该类中声明的属性即可作为全局变量用,属性设置对应get、set方法,然后实现onCreate()方法初始化这些变量,最后在AndroidManifest.xml的application节点中声明android:name="类路径+全名"即可实现在app启动的时候加载该类,实现全局变量的目的
2、剪切板的使用
得到剪切板的句柄:
ClipboardManager clibboardManager = getSystemService(Context.CLIBBOARD_SERVICE);
clibboardManager .setText(String s); //设置变量到剪切板
同样得到句柄之后clibboardManager .getText(String s) 即可得到参数值
当利用剪切板传递对象的时候,要求对象是可序列化的对象,impelements Serializable接口。属性有get、set方法以及无惨构造函数,传递的原理就是将对象以流的形式转成string类型的参数,然后接收参数的时候再将string类型的数据反序列化成java对象即可
android.util.Base64提供了一些列将其他数据类型和base64字串相互转换的方法,如encodeToString(),decode();
将对象转成base64串
MyData myData = new MyData();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
objectOutputStream.writeObject(myData);
String str = Base64.encodeToString(byteArrayOutputStream.toByteArray(), Base64.DEFAULT);
base64串还原对象
byte[] base64_array = Base64.decode(str, Base64.DEFAULT);
3、使用intent传递数据
Intent intent = new Intent(this, TargetActivity.class);
intent.putExtra("str", value);
intent.putIntExtra("name", intValue);
TargetActivity在onCreate方法里可以接收这些参数
intent = getIntent();
intent.getExtra("name");
intent.getIntExtra("name", 0);
intent本身对传递对象作了实现
Intent intent = new Intent(this, TargetActivity.class);
Mydata mydata = new MyData();
Bundle mBundle = new Bundle();
mBundle .putSerializable("name", myData);
intent,putExtras(mBundle );