1) 三层架构、MVC、MVP、MVVMjava
对于小项目能够按以下分法(mvp选用);对于大项目能够按模块分,而后模块内再按以下分发。android
分包(按功能分):web
basal:基类;面试
surface(fragment、activity、broadcast、listener):界面类;正则表达式
adapter:适配器类;redis
mvp(presenter、constract、view):mvp层类;算法
util:通用工具类;sql
widget:自定义View类;数据库
entity:实体类;编程
Config.class
MyApplication
2)xml(Extensible Markup Language,可扩展标记语言)
字体通常是34px、30px、28px、26px、24px、22px
小细线1px dddddd 粗线10px f5f5f5 背景色f5f5f五、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)四大组件-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
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系统架构
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建立时建立一个消息队列和线程对象,但不是资源池。
【数据结构】排序算法
【数据结构】查找
【数据结构】树
【数据结构】图
【数据结构】数组
【数据结构】队列和栈
【数据结构】线性表:顺序表、单链表
【算法】电梯调度算法/磁盘扫描算法
编程素质】多线程编程之设计模式
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
【网络基础】TCP/UDP
【数据结构】位运算
【网络基础】IP计算
【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++区别
1)布局优化、自定义View优化
删除布局中无用的控件和层级
有选择地使用性能较高的ViewGroup
用<include>标签、<merge>标签、ViewStub
2)activity启动优化
耗时操做优化
布局文件优化
视图加载优化。如:Fragment的懒加载,只有显示时才去加载。
3)列表优化
尽可能复用convertview历史的缓存,减小建立新的view对象。
尽可能的减小子孩子的id的查询次数,定义一个viewHolder。
4)内存优化
5)图片缓存
图片的三级缓存机制
项目管理-Git使用
项目管理-SVN学习
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从后台切换置前台
保持屏幕常亮
断线重连机制
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
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
欢迎你们加入Android技术开发交流群:653583088 本群提供免费的学习指导以及免费的解答不懂得问题均可以在本群提出来 以后还会有职业生涯规划以及面试指导进群修改群备注:开发年限-地区-经验方便解答问题