此项目开发过程中遇到的基础知识

一、关于Handler机制

1、handler:主要用于消息处理

2、Message:消息,子线程向UI线程发送消息,消息中携带者相应数据

3、MessageQueue:消息队列,由一个个Message消息组成

4、Looper:信息泵(消息轮循器),循环处理消息队列MessageQueue中的Message,将其发送给相应的Handler

他们之间的关系:

Handler负责发送消息和接收Looper传过来的消息(Message),并根据消息处理相应逻辑
Looper负责接收Handler发送过来的消息,并将该消息回传给Handler自己。
而MessageQueue只是相当于一个消息容器
二、Handler 那么为什么要写成静态内部类呢?或者写成其他单独的类呢?

隐性匿名类Handler变成static的内部类,由于static的内部类,使用的使用不需要外部类的实例,所以static的内部类和外部类是没有联系的,从而不持有外部类的引用,通过这种方法,我们可以避免该种情况的发生。

将隐性匿名类写成一个单独的类(top-level-class),这样Handler和Context之间就没有联系了。

简而言之一句话:避免内存内存泄露!


三、Activity生命周期及详解

1、Activity七个生命周期顺序如下:onCreate(), onStart(), onRestart(), onResume(), onPause(),onStop(), onDestroy()。

详解:

onCreate(): 创建Activity时调用,设置在该方法中,还以Bundle的形式提供对以前存储的任何状态的访问。

onStart(): 当Activity被用户可见时调用。

onResume(): Activity开始与用户交互时调用(无论是启动还是重新启动一个活动,该方法总是被调用)。

onPause(): Activity被暂停或收回cpu和其他资源时调用,该方法用户保护活动状态的,也是保护现场。

onStop(): Activity被停止并转为不可见阶段及后续的生命周期事件时调用。

onRestart(): Activity被重新启动时调用。该活动仍然在栈中,而不是启动新的Activity。

onDestroy():当Activity销毁时调用。


四、横竖屏切换时Activity生命周期

1、不设置Activity的android: configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次。

2、设置Activity的android: configChanges=“orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次。

3、设置Activity的android: configChanges=“orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfiguration方法

五、service使用:

第一种启动方式:

1.定义一个类继承Service
2.在Manifest.xml文件中配置该Service
3.使用Context的startService(Intent)方法启动该Service
4.不再使用时,调用stopService(Intent)方法停止该服务

 
 

使用这种start方式启动的Service的生命周期如下: onCreate()--->onStartCommand()onStart()方法已过时) ---> onDestory()

说明:如果服务已经开启,不会重复的执行onCreate(), 而是会调用onStart()onStartCommand()。 服务停止的时候调用 onDestory()。服务只会被停止一次。

特点:一旦服务开启跟调用者(开启者)就没有任何关系了。 开启者退出了,开启者挂了,服务还在后台长期的运行。 开启者不能调用服务里面的方法。

第二种启动方式:

 
 

采用bind的方式开启服务

使用Service的步骤:

1.定义一个类继承Service 2.在Manifest.xml文件中配置该Service 3.使用Context的bindService(Intent, ServiceConnection, int)方法启动该Service 4.不再使用时,调用unbindService(ServiceConnection)方法停止该服务

使用这种start方式启动的Service的生命周期如下: onCreate() --->onBind()--->onunbind()--->onDestory()

注意:绑定服务不会调用onstart()或者onstartcommand()方法

特点:bind的方式开启服务,绑定服务,调用者挂了,服务也会跟着挂掉。 绑定者可以调用服务里面的方法。


六、关于项目的内存溢出检测:度娘"LeakCanary",便可轻松检测项目中内存泄漏风险;

七、开发完成后给项目瘦身(Android):一般来说大家通常都会通过Analyze-->Run Inspection  by Name..-->在输入框内输入“Unused resourcese”这样就可以找到项目中没有用到的资源,将其删除;没用到的import、library等都可以删除;

八、假如打包后.apk文件较大怎么办呢?不必慌,我们可以对.apk文件进行分析,找出项目中哪些资源较大,从而进行优化处理:分析.apk文件步骤如下(Android Studio):Build-->Analyze Apk-->然后选中要分析的apk,在底部控制台就可看到安装包中的资源分布情况了;




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值