一些微不足道的Android总结(一)

标签: Android
52人阅读 评论(0) 收藏 举报
分类:

Android相关


简述Android整体架构

Android采用分层结构,从高到低分别是”应用程序层”、”应用程序框架层”、”核心类库”、”linux内核”

Android 5.0新特性

Material Design
支持多种设备
全新的通知中心设计
支持64位ART虚拟机
电池续航改进计划
全新的“最近应用程序”
改进安全性
不同数据独立保存
改进搜索
新的aip支持/蓝牙4.1

Android 6.0新特性

软件权限管理
网页体验提升
app关联
安卓支付
指纹支持
电量管理

Activity生命周期

Activity的启动方法

显式启动

Intent  intent = new Intent(this,OtherActivity.class);
startActivity(intent);

隐式启动

Activity启动模式

1.standard模式
(每启动一个Activity就在栈顶创建一个新的实例)
2. singleTop模式
(每当启动Activity时就会在栈顶检测是否存在该实例,如果没有就新创建一个新的实例)
3. singleTask模式
(保证整个Activity在应用中只会有一个实例,当启动Activity时如果实例存在则复用,并把该Activity上面的其他Activity全部出栈,如果没有就会新创建一个实例)
4. singleInstance模式
(该模式下只有一个实例,并且这个实例只会独立存在在一个任务栈中)

已调用多个Activity后如何安全退出

  1. 抛出异常强制退出
  2. 记录打开的Activity并逐个退出
  3. 发送特定的广播实现安全退出
  4. 递归退出每个Activity

Service有多少种启动方式

  1. 调用startService()启动
    这种方式启动的服务会长期存在在后台,即时启动它的组件应经被销毁,该服务依然运行。当内存不足时,该服务可能会被杀死。当资源又足够的时候,该服务又会重新启动。
    【onCreate()- >onStartCommand()->startService()->onDestroy()】

2.调用bindService()启动
BindService中使用bindService()方法来绑定服务,调用者和绑定者绑在一起,调用者一旦退出服务也就终止了【onCreate()->onBind()->onUnbind()->onDestroy()】。

## 广播的类型
1. 无序广播(不可被拦截)
2. 有序广播(可使用abortBroadcast()来拦截)

广播接收者的注册方式

  1. 静态注册
    在AndroidManifest.xml中注册,一次运行就会注册到系统中,以后无序运行该应用也会接受到广播。
  2. 动态注册
    不在AndroidManifest.xml中注册组件,直接调用Context的registerReceiver()来动态注册。代码运行时,广播接收者才会生效。代码运行结束,广播接收者也会失效。

对ContentProvider的理解

内容提供者是Android的四大组件之一。可用于不同应用间实现数据共享的功能,同时能保证数据的安全性。ContentProvider是使用表的形式来组织数据。无论什么数据过来都会把它当做一个表,然后通过增删改查等方法进行数据的操作。每个ContentProvider都有一个公共的URL,这个URL用于 表示这个ContentProvider所提供的数据。
当外部应用要对ContentProvider中的数据进行 添加,删除,修改,查询时,要使用Con tentResolver来完成。
该对象通过Context.getContextResolver()来创建。

ContextProvider/ContextResolver/ContextObsever三者

  1. ContextProvider是将应用的私有数据(如数据库)暴露给其他应用,让它们能访问到这些私有数据。同时提供增删改查方法,如果让别的应用访问要暴露一个公共的URL
  2. ContextResolver 根据URL来进行CRUD操作
  3. ContextObsever 当ContextProvider中的数据发生变化时,执行其中的回调方法。

对Fragment的理解

Fragment(碎片)必须寄宿在Activity,它可以看做是一个模块化的区域,但是它也有自己的生命周期。
加载方法分别是静态加载和动态加载。
静态加载:直接把Fragment当做普通UI控件放入界面中
动态加载:需要先了解Fragment的事务。事务就是一个原子性/不可拆分的操作。
流程:1.开启一个事务——>通过事务进行Fragment的操作——>提交事务,如果失败则添加不成功。

Http协议的特点

Http(超文本传输协议)是一种请求/响应式的协议。客户端与服务器建立连接后,客户端向服务器发送请求,反之,服务器向客户端返回响应。
1. 简单快速
客户端向服务器请求时,只需发送请求方式和路径
2. 灵活
允许传送任意类型的数据,使用Content-Type来标记
3. 无状态
协议对事务处理没有记忆能力,如果后续处理需要前面的数据需要重新再传

Android中的动画

  1. Tween Animation 补间动画
  2. Frame Animation 帧动画
  3. Property Animation

Android常见的视频播放方式

  1. 使用自带的播放器
  2. 使用VideoView
  3. 使用MediaPlayer与SurfaceView播放

简述对Handler 运行机制的理解

它接收其他线程的消息并通过该消息来通知主线程来更新主线程的内容.
Message: 在线程中传递的信息
MessageQueue:消息集合,用来存放Runnable和Message
Looper:不停地循环消息队列,只要有消息就从中取出

对AsyncTask异步任务的理解

AsyncTask专门处理异步问题,主要是为了耗时操作来开辟一个新线程
(不够熟悉)

如何绘制View

  1. 测量View尺寸
  2. 确定View位置
  3. 绘制View

对AIDL的理解

对ListView控件的优化

  1. 复用convertView
  2. 定义存储控件引用类 ViewHolder
  3. 数据的分批及分页加载
  4. 图片的处理

1.尽量避免在BaseAdapter中使用static来定义全局变量
2.避免在ListView适配器中使用线程

如何处理网络图片产生的OOM异常

  1. 调整图片大小·
  2. 即时回收不用的图片资源
  3. 缓存图片到内存中

RxJava

RxAndroid

如何进行屏幕适配

  1. 套图适配
  2. 9patch适配
  3. 布局适配

对Android生命周期的一些理解

  1. 对于onStart和onStop是从Activity是否可见来回调的,而OnResume和onPause是从Activity是否位于前台来回调的。

FlexboxLayout

常用属性:
1. flexDirection 主轴项目排列方向
2. flexWrap 支持换行排列
3. justifyContent 定义项目在主轴上的对齐方式
4. alignItems 定义项目在副轴轴上的对齐方式(单行起作用)
5. alignContent 定义了多根轴线的对齐方式(多行起作用)
子元素的属性:
1. layout_order 默认情况下子元素的排列方式按照文档流的顺序依次排序,而order属性可以控制排列的顺序,负值在前,正值在后。

Android库

  1. Butter Knife
  2. EventBus(Android事件发布/订阅框架) 传统的事件传递方式包括:Handler、BroadcastReceiver、interface回调

EventBus

简化了应用程序各组件间、组件与后台线程间的通信。比如请求网络、等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信。

ButterKnife

优势:
1. 强大的view绑定、click事件等处理功能,简化代码
2. 运行时不会影响APP效率,使用配置方便
3. 代码清晰,可读性强

ButterKnife通过APT编译时解析技术

ScrollView

ScrollView的内容大于它本身的size时,ScrollView会自动添加滚动条,并可以竖直滑动。
[ScrollView][1]

ImageView

  1. ScaleType设置
    在layout.xml中定义android:scaleType=”center|centerCrop|centerInside|fitCenter|fitXY|”
    [ImageView中ScaleType设置][2]

    Android Handler中sendEmptyMessage()和sendMessage()有什么区别?

    sendMessage()允许你处理Message对象(Message里可以包含数据,)。
    sendEmptyMessage()只能放数据
    注意:一个传Message类型的msg,一个传int类型的what,传what的,最终会转为msg
    [请看这里][3]

    浅谈MVPinAndroid

    View : 对应Activity,负责View的绘制以及与用户的交互
    Model : 业务逻辑和实体模型
    Presenter : 负责完成View于Model间的交互

    自定义View

    流程
    开始 –> 构造函数(View初始化) –> onMeasure()(测量view大小) –> onSizeChanged()(确定view大小)–> onLayout()(确定子view布局(包含子view时使用))
    –> onDraw()

    Toast的封装技巧

    public class ToastUtil{
    private static Toast toast;
    public static void showToast(Context context,String content){
        if(toast == null){
            toast = Toast.makeText(context,content,Toast.LENGTH_SHORT);
        }else{
            toast.setText(content);
        }
        toast.show();
    }
    }

    Android studio中的如何选择三个SdkVersion

complileSdkVersion
1. 告诉gradle用哪个Android SDK来编译你的应用.
2. 因此我们强烈推荐总是使用最新的 SDK 进行编译。在现有代码上使用新的编译检查可以获得很多好处,避免新弃用的 API ,并且为使用新的 API 做好准备。

minSdkVersion
1. minSdkVersion 则是应用可以运行的最低要求
2. 请记住,你所使用的库,如 Support Library 或 Google Play services,可能有他们自己的 minSdkVersion 。你的应用设置的 minSdkVersion 必需大于等于这些库的 minSdkVersion 。例如有三个库,它们的 minSdkVersion 分别是 4, 7 和 9 ,那么你的 minSdkVersion 必需至少是 9 才能使用它们。在少数情况下,你仍然想用一个比你应用的 minSdkVersion 还高的库(处理所有的边缘情况,确保它只在较新的平台上使用),你可以使用 tools:overrideLibrary 标记,但请做彻底的测试!

targetSdkVersion
1. targetSdkVersion 是 Android 提供向前兼容的主要依据

Android中的Rxjava2.0

原理:基于一种拓展的观察者模式
角色表展示:

角色 作用 类比
被观察者(Observable) 产生事件 顾客
观察者(Observer) 接收事件,并给出响应动作 厨房
订阅(Subscribe) 连接 被观察者 & 观察者 服务员
事件(Event) 被观察者 & 观察者 沟通的载体 菜式

Android中的权限管理

  1. 例如请求照相机权限(android 5.0以上)
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {   //sdk>=5.0 请求照相机权限
            if (checkSelfPermission(Manifest.permission.CAMERA)
                    != PackageManager.PERMISSION_GRANTED) {
                requestPermissions(new String[]{Manifest.permission.CAMERA},
                        REQUEST_PERMISSION_CAMERA);
            }
        }

Android中加一条横线

<View

        android:layout_width="fill_parent"
        android:layout_marginTop="10dp"
        android:layout_height="1dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:background="#aa000000" />

ViewPager

禁止ViewPager两侧颜色

在布局中设置 android:overScrollMode=”never”

Viewpager的滑动监听器 OnPagerChangeListener

    /** 
     * 滑动监听器OnPageChangeListener 
     *  OnPageChangeListener这个接口需要实现三个方法:onPageScrollStateChanged,onPageScrolled ,onPageSelected 
     *      1、onPageScrollStateChanged(int arg0) 此方法是在状态改变的时候调用。 
     *          其中arg0这个参数有三种状态(0,1,2) 
     *              arg0 ==1的时表示正在滑动,arg0==2的时表示滑动完毕了,arg0==0的时表示什么都没做 
     *              当页面开始滑动的时候,三种状态的变化顺序为1-->2-->0 
     *      2、onPageScrolled(int arg0,float arg1,int arg2) 当页面在滑动的时候会调用此方法,在滑动被停止之前,此方法回一直被调用。 
     *          其中三个参数的含义分别为: 
     *              arg0 :当前页面,及你点击滑动的页面 
     *              arg1:当前页面偏移的百分比 
     *              arg2:当前页面偏移的像素位置  
     *      3、onPageSelected(int arg0) 此方法是页面跳转完后被调用,arg0是你当前选中的页面的Position(位置编号) 
     */  
查看评论

微不足道的开始

花了大学整整三年来寻找自己真正喜欢的东西,到目前为止,算是终于向前迈出了一步,漫漫长路才刚刚开始。  秋招已经结束了,庆幸自己也算是找到了一份比较满意的工作。嗯,对于一个决心转行又没有什么实力的人来...
  • qq_33775794
  • qq_33775794
  • 2017-11-23 21:09:39
  • 21

堪称“职场圣经”的职业规划感想

如果这篇文章没有分享给你,那是我的错。? 如果这篇文章分享给你了,你却没有读,继续走弯路的你不要怪我。 如果你看了这篇文章,只读了一半你就说没时间了,说明你已经是个“茫”人了。 如果你看完了...
  • frankchen99
  • frankchen99
  • 2013-04-03 11:26:32
  • 452

总结Android模块化的一些知识点

在学习Android的过程中都不可避免地要接触到Android的模块化设计,其实模块化设计和架构设计一样在实际应用中非常广泛。尚学堂吴老师针对同学们提出的问题总结了几点关于Android模块化设计的知...
  • deliraliya
  • deliraliya
  • 2017-08-11 11:43:51
  • 76

Android之Activity系列总结(一)--Activity概览

Activity 本文内容 创建 Activity 实现用户界面 在清单文件中声明 Activity 启动 Activity 启动 Activity 以获得结果...
  • aabv54321
  • aabv54321
  • 2017-02-06 10:44:05
  • 416

Android 面试题总结之Android 基础(二)

Android 面试题总结之Android 基础(二) 上一篇面试总结,主要讲了Activity 和Intent ,这篇主要讲剩下的四大组件,面试中基础较多的就是四大组件,需要了解的知识点也很多。...
  • vfush
  • vfush
  • 2016-05-23 15:55:02
  • 8848

Android混淆总结篇(二)

Ⅰ.前言上篇文章总结混淆相关的知识点,基本的技术点都有罗列到。如果项目开发比较紧张,可以考虑套用混淆配置的模板,复制粘贴的基础上再修修补补. 上篇文章说到和朋友讨论的问题,前几天也基本探究完了,那么也...
  • yk377657321
  • yk377657321
  • 2017-03-18 16:33:37
  • 2319

[干货]总结的真好,Android重点知识点总结,不看你会后悔!

Activity的生命周期和启动模式相关 1、当前Activity的onPause方法执行结束后才会执行下一个Activity的onCreate方法,所以在onPause方法中不适合做耗时较长的...
  • xhmj12
  • xhmj12
  • 2016-09-09 11:03:41
  • 670

linux一些常见命令总结

文档查看:cat、tac、more、less、head、tail、cut、od、nl 文件权限:ls -l、chmod、chown、chgrp、umask 文件查找:find、whereis、loca...
  • u012658346
  • u012658346
  • 2016-03-30 20:22:30
  • 823

Lua简明入门实践(从"基"搞起)_(二)Lua基础语法

(二)Lua常用语法 作为有一定经验的猿,一些比较简单明了的基础语法,这里就不一一重述了,只选择性的说一下Lua特有的语法,或者常用的和容易混淆的语法。 Lua是动态类型语言,变量不需要类型定义。Lu...
  • MobileDreamWorks
  • MobileDreamWorks
  • 2015-08-02 13:30:43
  • 804

dp——vijos1322 解题

https://vijos.org/p/1322 n^3的做法; orz Fop_zz; f[i][j] 代表现在做到了j个题目; 最近做了i~j的题目,的最少月数; 这个怎么维护 我们...
  • largecub233
  • largecub233
  • 2017-05-26 10:11:27
  • 175
    个人资料
    等级:
    访问量: 0
    积分: 20
    排名: 0
    文章分类
    文章存档