第七周总结——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进行传输。

 

posted @   kuaiquxie  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示