共计 6860 个字符,预计需要花费 18 分钟才能阅读完成。
** 我收集了一些学习用的材料,其中蕴含了很多学习,面试,中高进阶 fluuter 材料,还有很多视频详解,如果有同学想进一步理解,详情请看文末。也欢送各路大神门前来装 X。
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
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);
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);
}
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;
}
4)其余 demo
android 离线日志文件打印
检测 android 主屏,并把 app 从后盾切换置前台
放弃屏幕常亮
断线重连机制
13,问题解决
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