【android学习】android知识点总结
2018-03-01 09:11
465 查看
1,Android UI体系
1) Android之MVC、MVP
对于小项目可以按如下分法(mvp选用);对于大项目可以按模块分,然后模块内再按如下分发。分包(按功能分):
basal:基类;
surface(fragment、activity、broadcast、listener):界面类;
adapter:适配器类;
mvp(presenter、constract、view):mvp层类;
util:通用工具类;
widget:自定义View类;
entity:实体类;
Config.class
MyApplication
2)xml
字体一般是34px、30px、28px、26px、24px、22px小细线1px dddddd 粗线10px f5f5f5 背景色f5f5f5、app的左右距离是20px
主题色
3)Window和WindowManager
4)图片
①Drawable
②Bitmap的加载和Cache
5)其他
事件通知实现的基本思想来源于观察者模式。(与Swing一样,都使用观察者模式)6)控件
①View
②标题栏
7)动画
8)菜单
当每次Menu显示时,会调用方法onPrepareOptionsMenu,也可以在菜单每次被调用时,对菜单中的项重新生成,通过重载onPrepareOptionsMenu来实现,由于每次调用时都要重新生成,对于那些不经常变化的菜单,效率就会比较低。调用Menu.addSubMenu()方法,为某个菜单项添加子菜单。
①选项菜单Options menus
一个Activity只能有一个选项菜单,在按下Menu键时,显示在屏幕下方。重写 onCreateOptionsMenu 用以创建选项菜单 ;
重写 onOptionsItemSelected 用以响应选项菜单 。
②上下文菜单Context menus
为Activity中的任何一个视图注册一个上下文菜单,“长按”出现。重写 onCreateContextMenu 用以创建上下文菜单;
重写 onContextItemSelected 用以响应上下文菜单 。
③弹出式菜单Popup menus
依赖于Activity中的某个一个视图。9)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);
10)实践应用
2,四大组件+重要组件
1)四大组件-Activity
①Fragment相关
2)四大组件-Service
3)四大组件-Content Provider
4)四大组件-BroadcastReceiver(广播接收者)
5)重要组件-intent
3,Android JVM
1)存储方式(数据持久化)
数据持久化:将内存中的数据模型转化为存储模型。、其他存储方式:
redis:一个开源使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。
sessionStorage:生命周期为当前窗口或标签页,一旦窗口或标签页被永久关闭了,那么所有通过sessionStorage存储的数据也就被清空了。
①SQLite数据库
存储结构化数据。点击查看SQLite详情②文件存储
分为内部存储和外部存储(SD卡)两种存储方式。a.File.mkdirs和File.mkdir的区别
File.mkdirs在多层目录底下创建文件。File.mkdir能在二层目录只能一层创建文件,仅能在已有目录下创建. 对于路径实际不存在的,调用File.mkdirs()方法。
b.onSaveInstanceState
onSaveInstanceState使用详解-之解决问题:android程序崩溃后,app异常③SharedPreferences
共享参数,键值对形式存储。点击查看SharedPreferences详解④网络存储
将数据存储到服务器上。⑤ContentProvider存储
查看四大组件-Content Provider。ContentProvider的目的是对外暴露数据供其他程序查询。
2)Android底层
①垃圾回收机制(GC)
②内存泄露OOM(OutOfMemory)
③JNI(Java Native Interface,java本地接口)编程
3)Android系统架构
Android系统架构采用了分层架构,从低层到高层(5层)分别是:Linux Kernel(Linux内核)、Hardware Abstraction Layer(硬件抽象层)、Libraries(系统运行库或者是c/c++ 核心库)、Application Framework(开发框架包 )、Applications(核心应用程序)。(旧的版本是4层:应用程序程序层、应用框架层、系统库和android运行时和Linux内核)
①应用程序程序层
该层提供一些核心应用程序包,例如电子邮件、短信、日历、地图、浏览器和联系人管理等。②应用框架层
该层是Android应用开发的基础,开发人员大部分情况是在和她打交道。应用程序框架层包括活动管理器、窗口管理器、内容提供者、视图系统、包管理器、电话管理器、资源管理器、位置管理器、通知管理器和XMPP服务十个部分。③系统库和android运行时
系统库包括九个子系统,分别是图层管理、媒体库、SQLite、OpenGLEState、FreeType、WebKit、SGL、SSL和libc。Android运行时包括核心库和Dalvik虚拟机,前者既兼容了大多数Java语言所需要调用的功能函数,又包括了Android的核心库,比如android.os、android.NET、android.media等等。后者是一种基于寄存器的java虚拟机,Dalvik虚拟机主要是完成对生命周期的管理、堆栈的管理、线程的管理、安全和异常的管理以及垃圾回收等重要功能。④Linux内核
Android核心系统服务依赖于Linux2.6内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。Linux内核也是作为硬件与软件栈的抽象层。驱动:显示驱动、摄像头驱动、键盘驱动、WiFi驱动、Audio驱动、flash内存驱动、Binder(IPC)驱动、电源管理等。4) 数字签名
5)DVM
每个 Android 应用程序都运行在单独的 Dalvik 虚拟机内(即每个 Android 应用程序对用一条 Dalvik 进程), Dalvik 专门针对同时高效地运行多个虚拟机进行优化,因此 Android 系统以方便的实现对应用程序进行隔离。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例,每一个DVM都是在Linux 中的一个进程,所有Android应用线程对于一个Linux线程,DVM因此可以更多的依赖操作系统的线程调度和管理机制。
Android 运行时由两部分组成:
1)Android 核心库集
提供了 Java 语言核心库所能使用的绝大部分功能。2)Dalvik 虚拟机
DVM负责运行 Android 应用程序。4,进程和同步
1)IPC(跨进程通信,Inter-Process Communication)
①socket传输中,流的关闭
②android端通过socket接收到数据产生乱码
③socket ECONNRESET 异常
④socket长连接,造成数据粘包问题
⑤android网络连接—主线程连接错误
2)线程和异步任务机制
3)线程和线程池
4)守护进程的实现及进程拉活详解
5)消息机制Handler
6)资源池
Android中提供了资源池的对象有:–Message
提供了消息池,有静态方法Obtain从消息池中取对象。
–AsynTask
AsynTask是线程池改造的,池里 默认提供(核数+1)个线程进行并发操作,最大支持(核数 * 2 + 1)个线程,超过后会丢弃其他任务。
–ThreadPool
Thread默认不提供资源池,除非使用线程池ThreadPool管理。
对于Looper,每个Looper创建时创建一个消息队列和线程对象,但不是资源池。
5,Android基本知识
1)项目结构
src
存放java源代码gen
根目录。存放系统自动生成的配置文件,如R文件、类库、jar包.R.java作用:
开发工具自动产生,存放各种资源id,方便找到对应资源。同时,未被R.java用到的资源,不会编译进软件。
assets
存放资源文件(网页、图片、音频)。不会自动占用生成的apk文件大小,被应用的时候才生成。
assets目录中的文件就需要借助AssetManager去访问。
AssetManager a = getAssets() ; //fileName为assets目录下需要访问的文件的名称 InputStream is = a.open(fileName) ; //然后就可以通过输入流来读取fileName的内容了
bin
自动生成的编译后的文件。libs
第三方jar包res
图片、布局文件、菜单布局文件、values文件夹:字符串、数字、颜色、样式等。AndroidManifest.xml:清单文件,配置应用相关信息:包名、权限、组件。
系统会为res目录下的所有资源生成相应的资源ID。
raw
在res目录下。res/raw目录下的文件,有些文档说会编译为二进制,有些文档说不会。
Android不能直接打开res raw目录中的数据库文件,而需要在程序第一次启动时将该文件复制到手机内存或SD卡的某个目录中,然后再打开该数据库文件。
InputStream is = getResources().openRawResource(R.id.fileNameID) ; //R.id.fileNameID为需要访问的文件对应的资源ID.接着我们就可以通过输入流来读取相应文件的内容了。
defalut.properties
存放项目环境信息。2)Android系统优缺点
五大不足:①安全与隐私
②首先开卖Android手机的不是最大运营商
③运营商仍然能影响到Android手机
④同类机型用户减少:缺少统一机型的程序
⑤过分依赖开发商缺少标准配置:开发依赖第三方,缺少产品统一性。
优点:
①市场份额大
②应用程序发展迅速
③智能厂家助力
④手机价廉但性能不低
⑤机型多,硬件配置优
⑥系统开源:利于创新,开发者多,方便开发。
3)Android SDK-tools目录下的常用工具
①android
②apkbuilder
用于打包apk③ddms(Dalvik Debug Monitor Service,Dalvik 调试监视器服务)
这个工具集成了Dalvik(为Android 平台定制的虚拟机(VM)),能够让你在模拟器或者设备上管理进程并协助调试。DDMS是一个程序执行查看器,可以看见线程和堆栈等信息。
功能:
为测试设备截屏;
选择某个特定的进程来调试,产生跟踪数据,观察堆(heap)和线程信息;
杀死进程;
Logcat。Log信息分为5个级别:Log.v(VERBOSE)详细信息、Log.d(DEBUG)除错讯息、Log.i(INFO)通知讯息、Log.w(WARN)警告讯息、Log.e(ERROR)错误讯息
广播状态信息;
模拟电话呼叫;
接收SMS;
虚拟地理坐标等。
工作:
DDMS将搭建起IDE与测试终端(Emulator或者connected device)的链接,他们应用到测试终端的连接情况,当有新的测试终端连接后,DDMS将捕捉到终端的ID,并通过adb建立调试器,从而实现发送指令到测试终端的目的。
④draw9patch
Draw 9-patch工具允许你使用所见即所得(WYSIWYG)的编辑器轻松地创建NinePatch图形。它也可以预览经过拉伸的图像,高亮显示内容区域。⑤emulator(Android模拟器)
AVD Manager(安卓虚拟设备管理器):可以配置:屏幕分辨率(Skin)、缓存区大小(RAM)、SD卡支持(SD Card Support)、键盘支持。
不能 配置蓝牙支持。
⑥mksdcard
帮助你创建磁盘映像(disk image),你可以在模拟器环境下使用磁盘映像来模拟外部存储卡(例如SD 卡)。⑦sqlite3
这个工具能够让你方便地访问SQLite 数据文件。这些数据文件是由Android 应用程序创建并使用的。⑧aidl(Android Interface Description Language,Android接口描述语言)
可以让你生成进程间的接口的代码,诸如service可能使用的接口。aidl的文件的内容类似java代码;创建一个Service(服务),在服务的onBind(Intent intent)方法中返回实现了aidl接口的对象;aidl对应的接口的方法前面不能加访问权限修饰符。
AIDL支持的数据类型有:
i>不需要import声明的简单Java编程语言类型:int boolean等。
ii>String,CharSequence不需要特殊声明
iii>List,Map和Parcelables类型
(这些类型内所包含的数据成员也只能是简单数据类型,String等其他支持类型。
⑨TraceView
程序性能分析器。是 Android 平台特有的数据采集和分析工具,它主要用于分析 Android 中应用程序的 hotspot。TraceView 本身只是一个数据分析工具,而数据的采集则需要使用 Android SDK 中的 Debug 类或者利用 DDMS 工具。
4)platform-tools目录
常用工具有:①aapt
②adb
③dx
④aidl
6,demo
检测android主屏,并把app从后台切换置前台
保持屏幕常亮
ping不同的网络并返回网络状态
断线重连机制
通过正则表达式解决数据传输过程中的堆包问题
px与dip转换
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; }
7,应用
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); }
3)日志
android离线日志文件打印8,问题解决
1)eclipse找不到设备,adb需要重启
写一个.bat文件,内容如下:(注意:cd /d D:\android-sdks\platform-tools 请替换为自己的adb.exe路径)
@echo off taskkill /F /IM adb.exe echo Kill完成... pause echo 重启开始... cd /d D:\android-sdks\platform-tools adb devices pause. & exit
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
9,语法
常用Manager10,开源控件
1)EventBus
①GitHub
②作用
EventBus就是publish/subscribe消息总线,主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息。可以传递String、class
③三要素
Event:事件。可以是任何的对象。
Subscriber:
事件订阅者,接收特定的事件。方法以onEvent**开头,一共有四个方法onEvent,onEventMainThread,onEventBackgroundThread,onEventAsync。它们之间的区别在于在不同的线程。等会会有一一举例。
Publisher:
事件发布者,用于通知Subscriber有事件发生,可以在任何的地方发布事件。使用也是简单,只要调用post(Object)方法就可以了。
④区别
onEvent:事件在哪个线程发布出来的,就会在这个线程中运行,也就是说发布事件和接收事件线程在同一个线程。
onEventMainThread:
事件无论是从哪个线程发布出来的,都会在UI线程中执行。
onEvnetBackground:
事件是在UI线程中发布出来的,那么就会在子线程中运行,如果事件本来就是子线程中发布出来的,那么就直接在该子线程中执行。
onEventAsync:
使无论事件在哪个线程发布,都会创建新的子线程
⑤使用
i>传递字符串EventBus.getDefault().register(this);//接收者 EventBus.getDefault().unregister(this);//接收者 @Subscribe//接收者 public void method(String state){ switch (state){ case LoginActivity .Tag: finish(); break; } } EventBus.getDefault().post(LoginActivity.Tag);//发送者
ii>传递类
public class MessageEvent { ... }//传递类 EventBus.getDefault().post(messageEvent);//发送 @Subscribe(threadMode = ThreadMode.MAIN) public void XXX(MessageEvent messageEvent) {//接收方(记得写注册和取消注册) ... }
2)ButterKnife
①GitHub地址
②介绍
ButterKnife是一个专注于Android系统的View注入框架,可以减少大量的findViewById以及setOnClickListener代码,可视化一键生成。具体用法查看GitHub。
3)CircleProgressDialog
用法见GitHub4)SwitchButton
滑动开关,用法见GitHub5)AndPermission
Android6.0以后需要加入权限的时候询问用户。用法见GitHub6)OptionFrame
一款Android弹出框、对话框、Dialog、popuwindow。用法见GitHub7)高德地图
获取定位8)友盟
分享功能注意:使用的时候需要申请key。
①友盟AppKey
②如果要进行微信/QQ分享,要微信和QQ的APP ID。
9)banner
github10)glide
Glide是一个开源的图片加载和缓存处理的第三方框架。github相关文章推荐
- android学习:知识点总结
- Android学习日志之二:Activity知识点总结
- Android知识点总结,学习过程梳理
- 学习android之 知识点总结
- Android阶段学习总结 7.25-7.29 天气预报 知识点
- 第一次写自己的blog,第一次把android的学习的各个知识点总结并增加自己学习的DEMO
- 快速学习Android开发知识点总结(磨砺营马剑威Android)
- android 学习知识点总结
- Struts2学习知识点总结
- Android画图学习总结(四)——Animation(上)
- Android画图学习总结(三)——Drawable
- Android画图学习总结(四)——Animation(中)
- Android画图学习总结(二)——Bitmap
- Android画图学习总结(一)——类的简介
- Android画图学习总结(三)——Drawable
- Android画图学习总结
- Android TTS学习——总结
- Android画图学习总结(二)——Bitmap
- Android画图学习总结(一)——类的简介
- Android画图学习总结(四)——Animation(下)