| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> android准备 -> 正文阅读 |
|
[移动开发]android准备 |
1、生命周期 onCreate:在首次创建 Activity 时调用。系统向此方法传递一个 Bundle 对象,其中包含 Activity 的上一状态,不过前提是捕获了该状态,而后会调用onStart方法。(可以在此方法中执行所有正常的静态设置 ,比如:创建视图、将数据绑定到列表等等。) 接下来看看关于事件分发的三个主要对象: 一个事件产生之后,都是先传给Activity,在传给ViewGroup,最后传给View,对比上面的例子,Activity对应的就是项目经理,viewGroup就是你的老大,而你就相当于view了; 三个重要方法: 这里要注意一点,Activity和View是没有onInterceptTouchEvent()也就是事件拦截这个方法的,仔细想想就可以想明白,Activity是处于分发机制的最顶端,如果一开始就吧事件拦截了,那么会导致整个屏幕都无法响应用户的操作,这就相当于一个项目里所有的事情都由你的项目经理一个人干了,这显然是不理智的;而view处于事件分发的最末端,它不需要拦截,事件分发到View的时候,view能处理就处理,不处理就返回给他的父控件; android有序广播和无序广播的区别? BroadcastReceiver所对应的广播分两类:普通广播和有序广播。? 普通广播通过Context.sendBroadcast()方法来发送。它是完全异步的。? 所有的receivers接收器的执行顺序不确定。 ? ?因此,所有的receivers接收器接收broadcast的顺序不确定。? 这种方式效率更高。但是BroadcastReceiver无法使用setResult系列,getResult系列及abort系列API? 有序广播是通过Context.sendOrderedBroadcast来发送。所有的receiver依次执行。? BroadcastReceiver可以使用setResult系列函数来结果传给下一个BroadcastReceiver,通过getResult系列函数来取得上个BroadcastReceiver返回的结果,并可以abort系列函数来让系统丢弃该广播让,使用该广播不再传送到别的BroadcastReceiver。? 可以通过在intent-filter中设置android:priority属性来设置receiver的优先级。优先级相同的receiver其执行顺序不确定。? 如果BroadcastReceiver是代码中注册的话,且其intent-filter拥有相同android:priority属性的话,先注册的将先收到广播。? 有序广播,即从优先级别最高的广播接收器开始接收,接收完了如果没有丢弃,就下传给下一个次高优先级别的广播接收器进行处理,依次类推,直到最后。? 5、 有序广播无序广播区别,被拦截后超时机制
这里的超时是指,Android系统(AMS)向一个广播接收器发送无序广播时, 并不需要等待该广播接收器返回结果,就会继续向下一个广播接收器发送广播。但是,当Android系统发送有序广播时,将会等待前一个广播接收器返回结果后(除非处理超时), 才会继续发送向下一个广播接收器发送广播。 6、 2.ListView 如何实现分页加载 在监听器中有两个方法:滚动状态发生变化的方法(onScrollStateChanged)和 listView 被滚动时调用的方法(onScroll) ② 在滚动状态发生改变的方法中,有三种状态: 手指按下移动的状态: SCROLL_STATE_TOUCH_SCROLL: // 触摸滑动 8、Fragment生命周期 TCP 的执行流程如下: 最开始时客户端和服务端都处于 CLOSED 状态,然后服务端先主动监听某个端口,此时服务器端就变成了 LISTEN(监听)状态; 然后客户端主动发起连接,发送 SYN(同步序列编号),此时客户端就变成了 SYN-SENT 状态; 服务端接收到信息之后返回 SYN 和 ACK 至客户端,此时服务器端就变成了 SYN-REVD 状态; 客户端接收到消息之后,再发送 ACK 至服务器端,此时客户端就变成了 ESTABLISHED(已确认)状态,服务端收到 ACK 之后,也变成了 ESTABLISHED 状态,此时连接工作就执行完了。 为什么 TCP 需要三次握手? 原因一:防止重复连接:三次握手的主要原因是为了防止旧的重复连接引起连接混乱问题 比如在网络状况比较复杂或者网络状况比较差的情况下,发送方可能会连续发送多次建立连接的请求。如果 TCP 握手的次数只有两次,那么接收方只能选择接受请求或者拒绝接受请求,但它并不清楚这次的请求是正常的请求,还是由于网络环境问题而导致的过期请求,如果是过期请求的话就会造成错误的连接。 所以如果 TCP 是三次握手的话,那么客户端在接收到服务器端 SEQ+1 的消息之后,就可以判断当前的连接是否为历史连接,如果判断为历史连接的话就会发送终止报文(RST)给服务器端终止连接;如果判断当前连接不是历史连接的话就会发送指令给服务器端来建立连接。 Fragment与Activity之间是如何传值的 二、Fragment向Activity传值: 三、Fragment与Frament之间传值: ViewPager对Fragment生命周期的影响 12、 ANR 是什么?怎样避免和解决 ANR(重要) ANR 一般有三种类型: (2)当前的事件正在处理,但没有及时完成UI 线程尽量只做跟 UI 相关的工作,耗时的工作(数据库操作,I/O,连接网络或者其他可能阻碍 UI线程的操作)放入单独的线程处理,尽量用 Handler 来处理 UI thread 和 thread 之间的交互。 Fragment的replace、add、remove,add配合show和hide14、 每个线程里只能有唯一的looper和与之绑定的message queue, looper不断的从message queue里取message,扔给handler的handleMessage处理。 我又问:looper取出来的message怎么知道扔给哪个handler呢? 小张:handler在sendMessage时,message会设置其target属性指向发送的handler对象,所以取出来时就知道扔给哪个handler处理了。 15、UI线程和非UI线程的交互方式 一般应该把像读写文件、请求网络这类的耗时操作放在子线程中去执行,这样可以避免UI线程的响应事件过慢,但是很多情况下在子线程中需要更新界面,比如从网络中获取到图片或者响应字符串后,将结果显示到界面上,但是在子线程中不允许直接更新UI界面,这时就需要在子线程中将结果返回给UI线程,由UI线程来负责更新界面元素,Android提供了几种方式用于处理UI线程和非UI线程之间的交互
Handler是最经常被用于子线程和主线程之间的交互方式,使用方式也很简单,在主线程中新建Handler,在子线程中通过Handler将数据通过Message发送给主线程,主线程负责更新UI界面 16、SimpleDateFormat的线程安全问题 在实际项目中,我们经常需要将日期在String和Date之间做转化,此时需要使用SimpleDateFormat类。使用SimpleDateFormat类的parse方法,可以将满足格式要求的字符串转换成Date对象,使用SimpleDateFormat类的format方法,可以将Date类型的对象转换成一定格式的字符串! SimpleDateFormat转换日期是通过Calendar对象来操作的,在parse方法的最后,会调用CalendarBuilder的establish方法,入参就是SimpleDateFormat维护的Calendar实例,在establish方法中会调用calendar的clear方法,如果此时线程A将calendar清空且没有设置新值,线程B也进入parse方法用到了SimpleDateFormat对象中的calendar对象,此时就会产生线程安全问题! 每一个使用SimpleDateFormat对象进行日期-时间进行format和parse方法的时候就创建一个新的SimpleDateFormat对象,用完就销毁即可! 17、饿汉式: 懒汉式 私有实例要加上volatile,防止jvm 重排序 导致空指针 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 9:51:14- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |