美文网首页
整理基础

整理基础

作者: mt大山 | 来源:发表于2019-04-16 11:39 被阅读0次

1、Activity的生命周期

1) onCreate() ->程序创建。
2) onRestart() ->程序进入onStop()但没进入到onDestroy()。
3) onStart() ->程序进入前台,可见但不可操作。
4) onResume() ->用户可操作。 
5) onPause() ->程序进入暂停状态。
6) onStop() -> 程序进入停止状态。
7) onDestroy() -> 程序销毁。

2、Fragment的生命周期

Fragment依赖Activity所以生命周期和Activity差不多。
1) onAttach() -> Fragment与Activity绑定。
2) onCreate() -> 初始化Fragment。可通过参数savedInstanceState获取之前保存的      
                            值。
3) onCreateView() -> 初始化Fragment的布局。加载布局和findViewById的操作通常
                                  在此函数内完成,但是不建议执行耗时的操作,比如读取数
                                  据库数据列表。

4) onActivityCreated() -> 执行该方法时,与Fragment绑定的Activity的onCreate方
                                        法已经执行完成并返回,在该方法内可以进行与Activity交
                                        互的UI操作,所以在该方法之前Activity的onCreate方法并
                                        未执行完成,如果提前进行交互操作,会引发空指针异
                                        常。
5) onStart() -> 执行该方法时,Fragment由不可见变为可见状态。
6) onResume() -> Fragment处于活动状态,用户可与之交互。
7) onpause() -> Fragment处于暂停状态,但依然可见,用户不能与之交互。
8) onStop() -> Fragment完全不可见。
9) onDestroyView() -> 销毁与Fragment有关的视图,但未与Activity解除绑定,依然  
                                    可以通过onCreateView方法重新创建视图。通常在
                                     ViewPager+Fragment的方式下会调用此方法。
10) onDestroy() -> 销毁Fragment。通常按Back键退出或者Fragment被回收时调用
                               此方法。
11) onDetach -> 解除与Activity的绑定。在onDestroy方法之后调用。

3、Service的生命周期

启动Service有两种方式 1、startService ,2、bindService。
startService -> onCreate() -> onStartCommand() -> onDestroy()。
bindService -> onCreate -> onBind() -> onUnbind() -> onDestroy()。
使用第一种方式启动service ,onCreate()只会被调用一次,多次启动会多次调用  
onStartCommand(),要退出Service时,调用StopService()。StartService不受
Activity的生命周期影响。

使用第二种方式启动service,onCreate() 只会被调用一次,多次绑定Service会调用
BindService,可以通过unBind() 解除绑定。 bindService受Activity的生命周期影
响,Activity销毁了,服务也停止了。
同时调用startService和bindService的生命周期:
onCreate() -> onStartCommand() -> onBind() -> onUnbind() -> onDestroy()

4、Activity的启动模式

  1. standard 默认启动方式,无论栈中是否存在实例都会创建新的实例。
  2. singleTop 栈顶复用模式,如果栈顶存在该实例,则不创建直接复用,如果栈顶不
    存在该实例则重新创建该实例。
  3. singleTask 每次启动Activity时检查栈中是否存在该实例,如果没有则创建,如果
    存在实例则复用该实例,并把之上的Activity都push出去。
  4. singleInstance 该模式的Activity会启动一个新的任务栈来管理Activity实例,并且
    该实例在整个系统中只有一个。无论从哪个任务栈中启动该Activity,都会使该
    Activity所在的任务栈转移到前台,从而使Activity显示。主要作用是为了在不同程
    序中共享一个Activity

5、Touch事件传递机制

当我们点击屏幕的时候,Activity会调用dispatchTouchEvent将事件传递给Window
Window会将事件传递给DecorView(DecorView是View的根布局)
DecorView再传递给ViewGroup。
Activity -> Window -> DecorView -> ViewGroup -> View。
事件分发主要有三个方法
dispatchTouchEvent
onInterceptTouchEvent
onTouchEvent

Activity先调用dispatchTouchEvent分发,接着调用super向下传递
ViewGroup首先调用 dispatchTouchEvent进行分发,接着调用
onInterceptTouchEvent(拦截事件),如果返回值为true,表示拦截,事件不会向
下层的View或者ViewGroup传递,如果返回值为false,表示不拦截,继续分发事
件。 默认是false。#View 是没有onInterceptTouchEvent方法的。
事件在ViewGroup和ViewGroup、ViewGroup和View直接传递,最终到达VIew。
View调用dispatchTouchEvent方法,然后在onTouchEvent处理事件,
onTouchEvent返回true 表示处理该事件,反之交给上一级处理。

6、自定义View流程

1) 自定义View属性,编写attr.xml文件。
2) 在layout布局中引用,同时引用命名空间
3) 在View的构造方法中获得我们自定义的属性,在自定义空间中进行读取(构造方
    法中拿到attr.xml文件值)
4) 重写onMeasure
5) 重写onDraw

7、Android中动画有哪些。

1) 补间动画
2) 帧动画
3) 属性动画

补间动画是对View一系列的操作比如: 平移、翻转、透明、放大缩小等。但他不会
改变View的属性值,只是改变了View的绘制位置,例如在一个按钮移动后,不在原
来的位置但是触发事件仍然在原来的坐标。

帧动画,播放一系列图片来实现动画效果。可以设置动画时间。

属性动画,动画除了View动画还可以是object对象,动画结束后,object的属性值被    
实实在在改变了。

8、ANR是什么,怎么避免ANR?

Application Not Responding,应用无响应。
1、界面5秒钟未响应。
2、广播10秒内未处理好事件。
3、Service在20秒内未完成事件。

避免: 在主线程减少耗时操作。
1) 在子线程处理耗时操作。
2)  使用Handler进行UI更新。使用Handler处理子线程结果,而不是使用
     Thread.wait()或者Thread.sleep()来阻塞主线程
3) Activity的onCreate和onResume回调中尽量避免耗时的代码
4) BroadcastReceiver中onReceiver代码也要尽量减少耗时操作,建议使用
    intentService处理。intentService是一个异步的,会自动停止的服务,很好解决
    了传统的Service中处理完耗时操作忘记停止并销毁Service的问题

9、如何优化ListView

1) 复用ConvertView
2) 使用ViewHolder 减少View的创建
3) item的布局减少嵌套
4) 数据多使用分页加载
5) 图片异步加载(Glide)

10、横竖屏切换时生命周期变化

如果不设置 android:configChanges 切横屏调用一次生命周期,横屏切竖屏调用两
个生命周期。
设置android:configChanges=" orentation "  生命周期各调用一次
设置android:configChanges=" orentation|keyboardHidden "时,切屏不会调用生命
周期 会调用 onConfigurationChanges方法

11、Android的UI适配

字体使用sp,控件使用dp,多用match_content ,wrap_content,weight属性,
图片放在不同分辨率的文件夹下。

12、RecyclerView和ListView的区别。

Recycler可以设置 ListView,GrideView ,和瀑布流,还可以设置列表的滚动方向
RecyclerView中View的复用不需要开发者自己写代码,已经封装好了。
RecyclerView可以设置Item的局部刷新,给Item添加动画效果。
如果要频繁的刷新数据,给item设置动画,建议使用RecyclerView。
如果只是列表展示 两者区别不大。

13Android异步消息处理机制(Handler)

主要用来子线程更新UI
1) handler,主要用来处理和分发消息(sendMessage(),handlerMessage())
2) Message,线程之间传递,可携带少量信息,用于不同线程之间交换数据,可以
    使用what ,arg1,arg2,字段携带整数类型数据, obj携带object对象。
3) MessageQueue,消息队列用于存放Message,先进先出。每个线程只有一个
    MessageQueue
4) Looper 循环消息队列取出待处理消息交给Handler处理。

14内存泄漏和内存溢出有什么区别

内存泄漏:是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏危
害可以忽略,但内存泄漏堆积后果很严重,无论多少内存,迟早被用光。
内存溢出:是指程序在申请内存时,没有足够的内存空间供其使用,出现out of 
memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢
出。内存溢出通俗的讲就是内存不够用。
内存泄漏原因以及解决办法:
1、Handler引起的内存泄漏
 将Handler声明为静态内部类,这样就不会持有对外部类的引用,和Activity的生命
 周期无关。
2、单例模式引起的内存泄漏
单例模式的Context不要使用Activity的Context,使用Application的Context因为
Application的生命周期和APP一致,所以不会导致内存泄漏。
3、非静态内部类创建静态实例引起的内存泄漏
把内部类修改为静态内部类。
4、非静态匿名内部类引起的内存泄漏
将匿名内部类修改为静态。
5、注册/反注册 未成对使用引起的内存泄漏
注册广播接收器,EventBus等,注意解绑。
6、资源对象没有关闭引起的内存泄漏
在资源不使用的情况下,记得调用 ,close(),destory(),release(),recycler()等方
法。
7、集合对象没有及时清理引起的内存泄漏
通常会把一些对象放在集合里,当不使用的时候及时清理,让相关对象不再被引
用。

15、TCP和HTTP的区别

Http是基于HTTPClient和urlConnention是短链接,请求一次后自动断开,需要重新
请求才能链接。
TCP是基于Socket,长连接,需要三次握手,四次挥手才能取消链接。

相关文章

  • 整理基础

    1、Activity的生命周期 2、Fragment的生命周期 3、Service的生命周期 使用第二种方式启动s...

  • OSGI基础整理

    OSGI框架可以分为三层,模块层、生命周期层和服务层,其中模块层关注代码的打包和共享,生命周期层提供运行时管理以及...

  • SQL基础整理

    某推文说,人一生不止可以活1次,每7年可以掌握一个新技能,那就从SQL开始把

  • 前端基础整理

    闭包 原型链 几乎任何对象有一个[[prototype]]属性,在标准中,这是一个隐藏属性。该属性指向的是这个对象...

  • Mysql 基础整理

    Mysql 常用命令 基本命令 业务中常用 业务中偶尔用到 需要注意的地方 常用函数 常用数据类型 创建表 创建用...

  • js基础整理

    1 概念类 数据类型 内置函数 this的使用场景 同步和异步的区别并举例 原型和原型链 闭包 同源策略(跨域) ...

  • ReactiveCocoa 基础整理

    本文在最快让你上手ReactiveCocoa之基础篇 此基础上增加了部分自己见解,本文具体用作对ReactiveC...

  • 前端基础整理

    如何理解JavaScript原型链JavaScript中的每个对象都有一个prototype属性,我们称之为原型,...

  • JAVA基础整理

    1.JVM为什么可以跨平台 JVM能跨计算机体系结构(操作系统)来执行Java字节码(JVM字节码指令集),屏蔽可...

  • ios基础整理

    1 基础篇 类与对象 Class Objective-C类是由Class类型来表示的,它实际上是一个指向objc_...

网友评论

      本文标题:整理基础

      本文链接:https://www.haomeiwen.com/subject/fxauwqtx.html