开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第32天,点击查看活动详情
一、Activity生命周期的几个过程
结合图理解这几个过程
在MainActivity,加上几个输出,方便观察现象
- 启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态
根据输出可以看出启动的时候确实调用了3个方法
- 当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause、onStop方法,暂停当前Activity的执行
- 当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态
- 当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态
- 用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态
- 当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法、进入运行状态
- 用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity
二、socket客户端
按下不同按键,往服务器发送不同消息
2.1、页面xml部分
- 放置2个按键
- 每个按键分配id,方便java获取,使用onClick绑定函数
- 参考按键响应
2.2、Java部分
创建2个类
2.2.1、NetUtills
- 创建一个函数,函数里开一个线程来发送数据
- 必须要在线程里进行网络访问,不然会有异常
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
- 创建onClick绑定函数
- 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;
}
}