第七周总结——android总结
作者:@kuaiquxie
作者的github:https://github.com/bitebita
本文为作者原创,如需转载,请注明出处:https://www.cnblogs.com/dzwj/p/16146187.html
Activity生命周期:
onCreate(): Ativity被创建的时候,常用于初始化基本布局,使用setContentView()加载布局文件,进行一些其它基本不耗时间的操作,实在需要就用异步线程,避免页面长时间空白。
onStart(): Activity被展示的时候,也就是说被创建了不一定要显示出来,但要显示出来了才onStart()。
onPause(): Activity将要被挂起的时候,页面失去焦点无法交互,此时Activity仍可见,比如将转入后台运行。
onResume():Activity已经从后台唤起并显示出来,将要但还未获得焦点无法操作的时候。
onStop(): Activity以及失去焦点且要转入后台的时候,此时Activity已不可见。
onRestart(): Activity被挂起后又被唤醒的时候,此时Activity还未显示出来。
onDestroy(): Activity被彻底销毁的时候。
Fragment生命周期:
Fragment生命周期与Activity周期较为类似,但其中比较值得提及的是:
onAttach():Fragment与Activity建立关联的时候,也就是此时Fragment已经知道了拥有自己的“上司”Activity是谁。
onActivityCreated():此时建立关联的Activity已经结束了onCreate()并返回。
onCreateView():此时初始化Fragment布局,也是将基本的布局加载好,不建议耗时间的操作,实在需要就用异步线程。
onDestroyView():Fragment的视图已经被销毁,但与Activity的关联未销毁,仍然可以重新创建视图。
onDetach():与Activity的关联将要被解除,Activity在onDestory()时会自动调用与之有关联的Fragment的onDetach()方法。
3.3.2 网络请求与异步线程
Android 4.0以后网络请求不能在主线程中执行已经是老生常谈了,这是为例放置线程阻塞应用无响应。解决方案一般就是启动异步线程进行处理,UI线程和网络请求就分离开了,各干各的。但这之间如何通信呢,或者说网络请求结束,不管成功失败,如何告诉UI线程?这将在3.3.3 Handler消息处理中提到。
线程通常还要用到线程辅助类Runnable,在Runnable的要求强制重写的方法run()中执行网络请求任务。
不仅如此,耗时操作通常都是在线程中执行的,例如数据库读写和一些其它文件操作之类,可见,多线程是安卓开发中一个重要的技术。
Handler和消息处理:
不同线程间如何通信,Handler就是一个易用的方案。如果把各个线程比作各干各活的工人,Handler就像是个中间人,负责把各个工人传来的消息进行处理,并有权操作UI线程中的组件,比如更新TextView的文字(非UI线程是不能操作的)。“工人”如何给Handler发一条消息?实现起来很简单,比如网络请求处理成功以后:
private final int NETWORK_PROCESS_OK = 1;//定义一个数字代号代表网络处理成功 private final int NETWORK_PROCESS_FAIL = 0; //代表网络处理失败 Message msg = handler.obtainMessage();//需要保证此时Handler的实例handler已经实例化不为空。 msg.what= NETWORK_PROCESS_OK; msg.sendToTarget(); //失败以后也可以传回原因: Message msg = handler.obtainMessage(); msg.what= NETWORK_PROCESS_FAIL; msg.obj=reason;//reason一般是String,但可以是任何Object msg.sendToTarget();
而Handler接收到消息后的处理一般如下:
handler = new Handler(){ public void handleMessage(Message msg) { switch (msg.what) { case NETWORK_PROCESS_OK: textview.setText("处理成功!"); break; case NETWORK_PROCESS_FAIL: textview.setText("处理失败!原因:" + msg.obj.toString()); break; } }; };
Activity间的跳转
Activity间使用Intent类进行跳转和数据传输,具体如下:
Intent intent = new Intent(this,TargetActivity.class);//this是一个Activity对象 intent.putExtra(“param1”,paramString1);//通过intent传送额外数据,可以在目标Activity中,使用getIntent()获取传入的intent对象,利用该intent对象的getStringExtra()接受传入的String类型参数,当然也有其它类型的,此处不列举。 startActivity(intent);
需要我们注意的是,Intent所能传输的数据容量是有上限的,过多的数据不建议使用Intent进行传输。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理