安卓APP页面生命周期

79 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第32天,点击查看活动详情

 一、Activity生命周期的几个过程

结合图理解这几个过程

在MainActivity,加上几个输出,方便观察现象

  1. 启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态
    根据输出可以看出启动的时候确实调用了3个方法
  2. 当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause、onStop方法,暂停当前Activity的执行
  3. 当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态
  4. 当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态
  5. 用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态
  6. 当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法、进入运行状态
  7. 用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity

二、socket客户端

按下不同按键,往服务器发送不同消息

2.1、页面xml部分

  1. 放置2个按键
  2. 每个按键分配id,方便java获取,使用onClick绑定函数
  3. 参考按键响应

2.2、Java部分

创建2个类

2.2.1、NetUtills

  1. 创建一个函数,函数里开一个线程来发送数据
  2. 必须要在线程里进行网络访问,不然会有异常
public class NetUtills {
	public static void sendMessageHandler(final String message){
    	new Thread(new Runnable() {
			public void run() {
				// TODO Auto-generated method stub
				try {
					Socket client = new Socket("192.168.1.42", 8980);	//连接服务端
					OutputStream out = client.getOutputStream();	//发送数据的通道
			
					out.write(message.getBytes());	//转换成byte数组,发送
				} catch (IOException e) {
					// TODO Auto-generated catch block
						e.printStackTrace();
				}
			}
		}).start();
    }
}

2.2、MainActivity

  1. 创建onClick绑定函数
  2. switch判断按下哪个按键,发送对应数据
public void bottonBeCliecked(View v){
	switch(v.getId()){
    	case R.id.b1:
    		NetUtills.sendMessageHandler("on light");
    		break;
    	case R.id.b2:
    		NetUtills.sendMessageHandler("off light");
    		break;
	}
}