zoukankan      html  css  js  c++  java
  • android知识点总结

    1,Android UI体系

    1) 三层架构、MVC、MVP、MVVM

    对于小项目可以按如下分法(mvp选用);对于大项目可以按模块分,然后模块内再按如下分发。

    分包(按功能分):

    basal:基类;

    surface(fragment、activity、broadcast、listener):界面类;

    adapter:适配器类;

    mvp(presenter、constract、view):mvp层类;

    util:通用工具类;

    widget:自定义View类;

    entity:实体类;

    Config.class

    MyApplication

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2)xml(Extensible Markup Language,可扩展标记语言)

    字体一般是34px、30px、28px、26px、24px、22px

    小细线1px dddddd 粗线10px f5f5f5 背景色f5f5f5、app的左右距离是20px

    主题色

    3)控件

    ①View

    【Android学习】android.view.ViewStub

    【android学习】EditText

    【android学习】Toast(消息弹框)

    【android学习】Dialog对话框

    【android学习】webView(网络视图)

    【Android学习】列表(ListView、RecyclerView)和adapter

    【Android学习】android.view.ViewStub

    【Android学习】Android常用框架

    ②标题栏

    4)Window和WindowManager

    5)图片

    ①Drawable

    ②Bitmap的加载和Cache

    6)动画

    7)Splash界面

    ①作用

    展现产品的logo

    初始化操作(创建数据库,读取配置文件)

    连接服务器检查软件授权

    连接服务器检查软件的更新

    ②实现

    用handler延迟,在SplashActivity界面中写如下代码 ,并禁用返回键。

    private final int SPLASH_DISPLAY_LENGHT = 3000;

    ……

    handler = new Handler();

    // 延迟SPLASH_DISPLAY_LENGHT时间然后跳转到MainActivity

    handler.postDelayed(new Runnable() {

    @Override

    public void run() {

    Intent intent = new Intent(SplashActivity.this,

    MainActivity.class);

    startActivity(intent);

    SplashActivity.this.finish();

    }

    }, SPLASH_DISPLAY_LENGHT);

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    2,Android基础

    1)四大组件-Activity

    ①Fragment相关

    2)四大组件-Service

    3)四大组件-Content Provider

    4)四大组件-BroadcastReceiver(广播接收者)

    5)重要组件-intent

    6)Context类和Application类

    7)【Android学习】Android Studio学习

    项目结构

    gradle

    jar和arr

    8)Android系统优缺点

    五大不足:

    ①安全与隐私

    ②首先开卖Android手机的不是最大运营商

    ③运营商仍然能影响到Android手机

    ④同类机型用户减少:缺少统一机型的程序

    ⑤过分依赖开发商缺少标准配置:开发依赖第三方,缺少产品统一性。

    优点:

    ①市场份额大

    ②应用程序发展迅速

    ③智能厂家助力

    ④手机价廉但性能不低

    ⑤机型多,硬件配置优

    ⑥系统开源:利于创新,开发者多,方便开发。

    9)常用Manager

    3,Android底层

    1)存储方式(数据持久化)

    数据持久化:将内存中的数据模型转化为存储模型。、

    其他存储方式:

    redis:一个开源使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。

    sessionStorage:生命周期为当前窗口或标签页,一旦窗口或标签页被永久关闭了,那么所有通过sessionStorage存储的数据也就被清空了。

    file, sqlite3, Preferences, ContentResolver与ContentProvider前三种数据操作方式都只是针对本应用内数据,程序不能通过这三种方法去操作别的应用内的数据。

    ①SQLite数据库

    存储结构化数据。

    ②File(文件存储、I/O存储)

    常用语存储大数量的数据,但是缺点是更新数据将是一件困难的事情。

    分为内部存储和外部存储(SD卡)两种存储方式。

    File.mkdirs和File.mkdir的区别

    File.mkdirs在多层目录底下创建文件。

    File.mkdir能在二层目录只能一层创建文件,仅能在已有目录下创建. 对于路径实际不存在的,调用File.mkdirs()方法。

    ③SharedPreferences

    本质就是一个xml文件,常用于存储较简单的参数设置。

    共享参数,键值对形式存储。

    ④网络存储

    将数据存储到服务器上。

    ⑤ContentProvider存储

    查看四大组件-Content Provider。

    ContentProvider的目的是对外暴露数据供其他程序查询。

    每个Content Provider都会对外提供一个公共的URI(包装成Uri对象),如果应用程序有数据需要共享时,就需要使用Content Provider为这些数据定义一个URI,然后其他的应用程序就通过Content Provider传入这个URI来对数据进行操作。

    2)【Java学习】Java内存

    3)【Android学习】DVM——apk生成、安装、启动、反汇编

    4)【Android学习】NDK编程——JNI(Java Native Interface,java本地接口)编程

    5)【Android学习】Android安全机制

    6)【Android学习】Android系统架构

    4,进程和同步

    1)【android 】进程、守护进程的实现及进程拉活

    2)【java学习】进程、线程、程序

    3)【Android学习】IPC(跨进程通信,Inter-Process Communication)

    4)【Android学习】Android网络:Socket、HTTP

    ①socket传输中,流的关闭

    ②android端通过socket接收到数据产生乱码

    ③socket ECONNRESET 异常

    ④socket长连接,造成数据粘包问题

    ⑤【Android学习】断线重连、长连接心跳机制

    5)【Android学习】序列化:Serializable和Parcelable

    6)【Android学习】消息机制Handler

    7)【Android学习】线程的其他方式:AsyncTask、IntentService、HandlerThread、ThreadPoolExecutor

    8)【java学习】多线程并发

    9)【java学习】java锁

    10)资源池

    Android中提供了资源池的对象有:

    –Message

    提供了消息池,有静态方法Obtain从消息池中取对象。

    –AsynTask

    AsynTask是线程池改造的,池里 默认提供(核数+1)个线程进行并发操作,最大支持(核数 * 2 + 1)个线程,超过后会丢弃其他任务。

    –ThreadPool

    Thread默认不提供资源池,除非使用线程池ThreadPool管理。

    对于Looper,每个Looper创建时创建一个消息队列和线程对象,但不是资源池。

    5,数据结构和算法

    【数据结构】排序算法

    【数据结构】查找

    【数据结构】树

    【数据结构】图

    【数据结构】数组

    【数据结构】队列和栈

    【数据结构】线性表:顺序表、单链表

    【算法】电梯调度算法/磁盘扫描算法

    6,设计模式

    编程素质】多线程编程之设计模式

    1.复合模式:三层架构、MVC、MVP、MVVM

    2.设计模式-单例模式

    配置类的使用。

    3.设计模式-模板方法

    通过抽象类或接口提前定义要实现的方法。

    4.设计模式-观察者模式

    消息的通知。

    5.设计模式-装饰模式:处于安全目的,保护被访问者

    对一个已有的接口进行功能扩展。

    如,继承父类,并增加扩展新的方法。

    6.设计模式-策略模式

    MVC中:

    控制器是视图的策略。

    视图只关心系统中可视的部分,对于任何界面行为,都委托给控制器处理。

    控制器负责和模型交互来传递用户请求,对于工作是怎么完成的,视图毫不知情。

    7.设计模式-工厂模式(Factory Pattern)、 控制反转(IoC)与依赖注入(DI)

    简单工厂、工厂方法、抽象工厂。创建新对象。

    8.设计模式-命令模式

    支持撤销。

    9.设计模式-适配器模式(Adapter)

    adpater的使用。

    10.设计模式-外观模式

    如用一个spManager管理所有的sp对象获得的数据。

    11.设计模式-桥接模式

    将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化。

    举例:汽车和公路问题。

    12.设计模式-代理模式(委托模式、Proxy Pattern):动态扩充对象功能

    传入对象,并调用对应的方法。如接口回调。

    13.迭代器模式

    Iterator。

    14.组合模式(合成模式)

    允许将对象组合成树形结构来表现“整体/部分”层次结构。树节点可以对子节点进行增删改查等操作。

    View和ViewGroup就是一种很标准的组合模式。

    15.状态模式

    机器取糖果,允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。

    16.生成器模式Builder Pattern

    如AlertDialog.Builder。

    17.责任链模式

    经常被使用在窗口系统中,处理鼠标和键盘之类的事件。

    18.蝇量模式Flyweight Pattern

    19.解释器模式Interpreter Pattern

    20.中介者模式Mediator Pattern

    21.备忘录模式MementoPattern

    当你需要让对象返回之前的状态时(例如:用户请求撤销操作),就使用备忘录模式

    22.原型模式Prototype Pattern

    23.访问者模式Visitor Pattern

    7,网络基础、操作系统基础

    【网络基础】TCP/UDP

    【数据结构】位运算

    【网络基础】IP计算

    8,数据库

    9,java基础

    【java学习】java基础语法

    【java学习】String字符串

    【java学习】类Class

    【java学习】集合框架

    【java学习】JVM学习

    【java学习】面向对象三大特性:封装,继承,多态

    【Android学习】缓存

    【java学习】修饰符

    【java学习】数据类型

    【java学习】装箱与拆箱、泛型

    【java学习】异常

    【java学习】反射机制

    【java学习】java基础语法

    【java学习】正则表达式(Regular Expression)

    【java学习】Json框架

    【Java学习】JAVA和C++区别

    10,Android性能优化

    1)布局优化、自定义View优化

    删除布局中无用的控件和层级

    有选择地使用性能较高的ViewGroup

    用<include>标签、<merge>标签、ViewStub

    2)activity启动优化

    耗时操作优化

    布局文件优化

    视图加载优化。如:Fragment的懒加载,只有显示时才去加载。

    3)列表优化

    尽量复用convertview历史的缓存,减少创建新的view对象。

    尽量的减少子孩子的id的查询次数,定义一个viewHolder。

    4)内存优化

    5)图片缓存

    图片的三级缓存机制

    11,项目管理

    项目管理-Git使用

    项目管理-SVN学习

    12,应用

    1)token登录

    ①定义

    Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

    ②作用

    Token的目的是为了验证用户登录情况以及减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

    Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,这样增加了服务器负担。

    ③应用

    i>用户首次登录成功之后, 服务器端就会生成一个 token 值,保存在数据库并返回给客户端.

    ii>客户端拿到 token 值之后,使用sp进行保存。

    iii>客户端再次发送网络请求(一般不是登录请求)的时候,就会将这个 token 值附带到参数中发送给服务器.

    iv>服务器接收到客户端的请求之后,取出token值与保存在本地(数据库)中的token值做对比

    如果两个 token 值相同, 说明用户处于登录状态。

    如果没有这个 token 值, 没有登录成功。

    如果 token 值不同: 说明原来的登录信息已经失效,让用户重新登录。

    2)登录验证

    通过.requestFocus()获得焦点,提高用户体验

    String Str_name = et_username.getText().toString().trim();

    String Str_psw = et_password.getText().toString().trim();

    if (null != Str_name && Str_name.equals("")) {

    showCustomToast("用户名不能为空");

    et_username.requestFocus();

    } else if (null != Str_psw && Str_psw.equals("")) {

    showCustomToast("密码不能为空");

    et_password.requestFocus();

    } else if (Str_psw.contains("卍")) {

    showCustomToast("密码不能含有特殊字符");

    et_password.requestFocus();

    } else if (Str_psw.length() < 6) {

    showCustomToast("密码不能少于6位");

    et_password.requestFocus();

    } else {

    tryLogin(Str_name, Str_psw);

    }

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    3)GPS开启

    检测GPS是否开启,如果没有则跳到GPS界面供用户开启。

    LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

    // 判断GPS是否正常启动

    if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {

    ToastUtil.showShort(context, "未开启位置服务,请开启GPS导航");

    // 返回开启GPS导航设置界面

    Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);

    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    startActivityForResult(intent, 0);

    return;

    }

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    4)其他demo

    android离线日志文件打印

    检测android主屏,并把app从后台切换置前台

    保持屏幕常亮

    断线重连机制

    13,问题解决

    1)eclipse找不到设备,adb需要重启

    写一个.bat文件,内容如下:

    (注意:cd /d D:android-sdksplatform-tools 请替换为自己的adb.exe路径)

    @echo off

    taskkill /F /IM adb.exe

    echo Kill完成...

    pause

    echo 重启开始...

    cd /d D:android-sdksplatform-tools

    adb devices

    pause. & exit

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2)其它

    ①android中使用Menu时可能需要重写的方法有:onCreateOptionMenu()和onOptionItemSelected().

    ②eclipse编辑器乱码解决

    configChanges详解-之解决问题:手机切换字体后,app异常崩溃

    eclipse创建app时多出appcompat_v7

    android开发误删appcompat_v7

    Replace “…” with ellipsis character (…, &&;#8230;) ?

    eclipse ‘Launching Hello’has encountered a problem

  • 相关阅读:
    TCP建立连接和断开连接
    城市三级联动Springmvc+mysql
    JS页面间数据传递的各种方法
    点击Button弹出登陆注册框
    一个多表联合查询引发的思考
    Linq扩展方法获取单个元素
    Visual Studio 常见问题
    格式化asp.net mvc视图页面
    2014上半年度挑战回顾
    2014年上半度年度挑战
  • 原文地址:https://www.cnblogs.com/876013676ch/p/10034851.html
Copyright © 2011-2022 走看看