对于小项目可以按如下分法(mvp选用);对于大项目可以按模块分,然后模块内再按如下分发。
分包(按功能分):
basal:基类;
surface(fragment、activity、broadcast、listener):界面类;
adapter:适配器类;
mvp(presenter、constract、view):mvp层类;
util:通用工具类;
widget:自定义View类;
entity:实体类;
Config.class
MyApplication
字体一般是34px、30px、28px、26px、24px、22px
小细线1px dddddd 粗线10px f5f5f5 背景色f5f5f5、app的左右距离是20px
主题色
##3)控件
【Android学习】android.view.ViewStub
【android学习】EditText
【android学习】Toast(消息弹框)
【android学习】Dialog对话框
【android学习】webView(网络视图)
【Android学习】列表(ListView、RecyclerView)和adapter
【Android学习】android.view.ViewStub
【Android学习】Android常用框架
展现产品的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);
①软件开发的结构化生命周期方法将软件生命周期划分成:计划阶段、开发阶段、运行阶段。
②引入了“风险驱动”的思想,适用于大规模的内部开发项目的是:螺旋模型。
项目结构
gradle
jar和arr
五大不足:
①安全与隐私
②首先开卖Android手机的不是最大运营商
③运营商仍然能影响到Android手机
④同类机型用户减少:缺少统一机型的程序
⑤过分依赖开发商缺少标准配置:开发依赖第三方,缺少产品统一性。
优点:
①市场份额大
②应用程序发展迅速
③智能厂家助力
④手机价廉但性能不低
⑤机型多,硬件配置优
⑥系统开源:利于创新,开发者多,方便开发。
数据持久化:将内存中的数据模型转化为存储模型。
其他存储方式:
redis:一个开源使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。
sessionStorage:生命周期为当前窗口或标签页,一旦窗口或标签页被永久关闭了,那么所有通过sessionStorage存储的数据也就被清空了。
file, sqlite3, Preferences, ContentResolver与ContentProvider前三种数据操作方式都只是针对本应用内数据,程序不能通过这三种方法去操作别的应用内的数据。
存储结构化数据。
常用语存储大数量的数据,但是缺点是更新数据将是一件困难的事情。
分为内部存储和外部存储(SD卡)两种存储方式。
####File.mkdirs和File.mkdir的区别
File.mkdirs在多层目录底下创建文件。
File.mkdir能在二层目录只能一层创建文件,仅能在已有目录下创建. 对于路径实际不存在的,调用File.mkdirs()方法。
本质就是一个xml文件,常用于存储较简单的参数设置。
共享参数,键值对形式存储。
将数据存储到服务器上。
查看四大组件-Content Provider。
ContentProvider的目的是对外暴露数据供其他程序查询。
每个Content Provider都会对外提供一个公共的URI(包装成Uri对象),如果应用程序有数据需要共享时,就需要使用Content Provider为这些数据定义一个URI,然后其他的应用程序就通过Content Provider传入这个URI来对数据进行操作。
Android中提供了资源池的对象有:
–Message
提供了消息池,有静态方法Obtain从消息池中取对象。
–AsynTask
AsynTask是线程池改造的,池里 默认提供(核数+1)个线程进行并发操作,最大支持(核数 * 2 + 1)个线程,超过后会丢弃其他任务。
–ThreadPool
Thread默认不提供资源池,除非使用线程池ThreadPool管理。
对于Looper,每个Looper创建时创建一个消息队列和线程对象,但不是资源池。
删除布局中无用的控件和层级
有选择地使用性能较高的ViewGroup
用标签、
标签、ViewStub
耗时操作优化
布局文件优化
视图加载优化。如:Fragment的懒加载,只有显示时才去加载。
尽量复用convertview历史的缓存,减少创建新的view对象。
尽量的减少子孩子的id的查询次数,定义一个viewHolder。
图片的三级缓存机制
#11,项目管理
项目管理-Git使用
项目管理-SVN学习
Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
Token的目的是为了验证用户登录情况以及减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,这样增加了服务器负担。
i>用户首次登录成功之后, 服务器端就会生成一个 token 值,保存在数据库并返回给客户端.
ii>客户端拿到 token 值之后,使用sp进行保存。
iii>客户端再次发送网络请求(一般不是登录请求)的时候,就会将这个 token 值附带到参数中发送给服务器.
iv>服务器接收到客户端的请求之后,取出token值与保存在本地(数据库)中的token值做对比
如果两个 token 值相同, 说明用户处于登录状态。
如果没有这个 token 值, 没有登录成功。
如果 token 值不同: 说明原来的登录信息已经失效,让用户重新登录。
通过.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);
}
检测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;
}
android离线日志文件打印
检测android主屏,并把app从后台切换置前台
保持屏幕常亮
断线重连机制
写一个.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
①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