仅个人学习小结,部分内容摘自网络,如有侵权,请联系删除,不便之处,敬请原谅
1、命名规范
插件id名和方法名用小驼峰命名法,资源名 如layout.xml文件,string color等,用xiaoxie_xiaoxie命名
包命名, com.gongsiming.xiangmuming.gongnengbaoming
类命名,大驼峰命名法
2、在HSB模式中,H(hues)表示色相,S(saturation)表示饱和度,B(brightness)表示亮度。 HSB模式对应的媒介是人眼。
RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。
一个是人眼的方式来表达色彩 另一个是三色原理的~
3、
a\用static可以加快访问速度,达到高效访问变量;
b\用final简单, 就是不常变;
c\不用Color是因为已经是static final了,如果用了Color.XXX的话,会长期在内存中导入一个没必要的包,占用内存,浪费内存资源;
4、MD5加密原理是散列算法,散列算法也称哈希算法。
计算机专业学的数据结构就有哈希表这一知识点。
比如10除以3余数为一,4除以3余数也为一,但余数为一的就不知道这个数是哪个了。
所以md5不能解密。
就算是设计这个加密算法的人都不知道。
但是你的密码是怎么验证的呢?就是因为同一密码加密后一定相同。
你输入密码加密后才能知道你的密码是否正确。
也就是说,你的密码只有你自己知道。
也是为什么扣扣密码只能重置,不能找回的原因。
over
有些网站,让你输入原文和散列值,然后存在数据库里。等你再进行所谓的“解密”时,它搜索一下数据库。这叫解密?这叫蒙人。
我们都知道4+4=8,那给你8,你怎么知道我用的是4+4还是8+0或是6+2呢?
MD5是哈希/摘要算法,不是加密算法。
5、在textview中输入tools:text=”test”来预览效果(先顶部添加 xmlns:tools=”http://schemas.android.com/tools”)
<TextView
tools:text="test"
android:layout_width="wrap_content"
android:layout_height="100dp"
/>
同理ListView也可以
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:listheader="@layout/demo_header"
tools:listitem="@layout/demo_item"
/>
6、activity隐式跳转要设置以下两条,否则可能报错
<intent-filter>
<action android:name="com.forgot.abcdefg" />
<!--<category android:name="android.intent.category.DEFAULT"/>-->
<category android:name="customer_category_here" />
</intent-filter>
常用category
android.intent.category.DEFAULT
android.intent.category.BROWSABLE
android.intent.category.LAUNCHER
android.intent.category.HOME
7、ViewHolder不是Android的开发API,而是一种设计方法,就是设计个静态类,缓存一下,省得Listview更新的时候,还要重新操作。
下面以listView加载方式比较一下viewholder的便利。
viewholder的方式:将convetView的tag设置为ViewHolder,不为空时重新使用即可
8、也就是说此时的运行顺序为:
1. 父类静态块
2. 自身静态块
3. 父类块
4. 父类构造器
5. 自身块
6. 自身构造器
赋值顺序为:
1.
1. 父类的静态变量赋值
2. 自身的静态变量赋值
3. 父类成员变量赋值
4. 父类块赋值
5. 父类构造器赋值
6. 自身成员变量赋值
7. 自身块赋值
8. 自身构造器赋值
9、
Android NDK 运行错误:java.lang.UnsatisfiedLinkError: Couldn’t load XXX indLibrary returned null
方法1是:直接将so文件放到了Android Studio 的默认路径src > main > jniLibs
方法2是:修改jniLibs的默认路径为libs
android {
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
10、在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById()。不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;而findViewById()是找xml布局文件下的具体widget控件(如Button、TextView等)
1、对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入;
2、对于一个已经载入的界面,就可以使用Activiyt.findViewById()方法来获得其中的界面元素。
LayoutInflater 是一个抽象类,在文档中如下声明:
public abstract class LayoutInflater extends Object
获得 LayoutInflater 实例的三种方式
1. LayoutInflater inflater = getLayoutInflater();//调用Activity的getLayoutInflater()
2. LayoutInflater inflater = LayoutInflater.from(context);
3. LayoutInflater inflater = (LayoutInflater)context.getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
11、数据结构,数据库,sql操作。 函数式编程。 分布式系统开发
12、若导入Eclipse项目后出现中文乱码,则是文件编码格式问题,看下是GBK还是utf-8,先把window-preference-workspace下的编码格式改过来,重新导入项目 就没有乱码了
13、office套件可以内联使用MathType功能,即便MathType 没注册,也能使用精简功能
14、bt_1.setTextColor(0xffffffff); 在java文件中设置字体颜色
15、关于ButtonFlat设置字体颜色,在java文件中设置
btn.setTextColor(0xffffffff);
ButtonFlat设置字体大小,先在ButtonFlat.java内 参考ButtonRectangle.java代码,在65行增加
int[] array = {android.R.attr.textSize};
TypedArray values = getContext().obtainStyledAttributes(attrs, array);
float textSize = values.getDimension(0, -1);
values.recycle();
if(textSize != -1)
textButton.setTextSize(textSize);
然后在xml布局文件中setTextSize就有效了
16、当没有OnClick属性的插件时,可以用OnTouchEven 或dispatchTouchEvent
setOnTouchListener
17、当android的activity2 经过finish回到activity1时,会执行onStart onResume等操作吗
会执行onRestart ,onStart,onResume
onResume在上一个finish()之后也会再执行,而onCreate只会在new Activity时才会执行,所以若有想每次回到当前窗口都会执行的操作,就需要放在onResume中
* Created by forgot on 2016/8/2.
* 这个activity是为了理解生命周期而建立的,首次启动activity是,启动onCreate,onStart,onResume,
* 切换到其他activity时,执行onPause,onStop,onDestroy
* 从其他activity返回上一个activity时,执行了onRestart,onStart,onResume
* 若停留在当前activity,只是按了home键,则执行onPause,onStop
* 此时再按软件,回到当前activity时,执行了onRestart,onStart,onResume
18、设置ImageView铺满全屏
imageView.setScaleType(ImageView.ScaleType. CENTER_CROP);
19、relativelayout 用这个来居中 要先设置Layout为wrap_content才行
android:layout_alignParentRight=”true”
android:layout_centerHorizontal=”true”
android:layout_centerVertical=”true”
20、不要随便用 git reset –hard commitID 会把之后的commit都删除的,一般就用 git reset id就行了,不小心删除的恢复方法
可以通过reflog来进行恢复,前提是丢失的分支或commit信息没有被git gc清除
一般情况下,gc对那些无用的object会保留很长时间后才清除的
可以使用git reflog show或git log -g命令来看到所有的操作日志
恢复的过程很简单:
1. 通过git log -g命令来找到需要恢复的信息对应的commitid,可以通过提交的时间和日期来辨别,找到执行reset –hard之前的那个commit对应的commitid
2. 通过git branch recover_branch commitid 来建立一个新的分支
这样,就把到commitid为止的代码、各种提交记录等信息都恢复到了recover_branch分支上了。
21、关于Linphone,在MainActivity中添加
mPrefs.setInitiateVideoCall(true); //设置默认接通视频,而不是语音状态
22、CG Computer Animation
23、
24、实现逐桢动画播放
AnimationDrawable anim = new AnimationDrawable();
for (int i = 1; i <= 6; i++) {
int id = getResources().getIdentifier("lottery_" + i, "mipmap", getPackageName());
Drawable drawable = getResources().getDrawable(id);
anim.addFrame(drawable, 200);
}
anim.setOneShot(false);
imageView.setImageDrawable(anim);
anim.start();
25、如何自定义View?
View 为我们提供了 onMeasure() onLayout() onDraw() 这样的方法,其实所谓的自定义View,也就是对onMeasure() onLayout() onDraw() 三个方法的重写的过程。
所谓的自定义View 实际上,就是仿照View的工作流程,去自己实现的过程。根据继承对象的不同自定义View又分为继承View 与ViewGroup两种。
26、
Intent intent=new Intent(Intnet.ACTION_DIAL)
Intent intent=new Intent("android.intent.action.DIAL");
<activity
android:name="com.example.FirstActivity">
<intent-filter>
<action android:name="com.example.SEND_EMAIL"/>
<action android:name="com.example.SEND_MESSAGE"/>
<action android:name="com.example.DIAL"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
27、IPv4:IP地址由4个字节(0~255)构成,共32位。
IPv6:IP地址由16个字节(0~255)构成,共128位。
28、什么是线程安全?
如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
或者说:一个类或者程序所提供的接口对于线程来说是原子操作,或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题,那就是线程安全的。
29、java中Instance的作用什么?
如题所问,下面是一个例子,请问为什么要把这个类实例化?有什么好处?
//public static DBConnect instance;
public static DBConnect getInstance(){
if(instance == null){
instance = new DBconnect();
}
return instance;
}例模式,一般用于比较大,复杂的对象,只初始化一次,应该还有一个private的构造函数,使得不能用new来实例化对象,只能调用getInstance方法来得到对象,而getInstance保证了每次调用都返回相同的对象
单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。
饿汉式单例
//饿汉式单例类.在类初始化时,已经自行实例化
public class Singleton1 {
private Singleton1() {
private static final Singleton1 single = new Singleton1();
//静态工厂方法
public static Singleton1 getInstance() {
return single;
}
}
30、设计原则:(重要)
a.
逻辑代码独立到单独的方法中,注重封装性–易读,易复用。
不要在一个方法中,写下上百行的逻辑代码。把各小逻辑代码独立出来,写于其它方法中,易读其可重复调用。
b.
写类,写方法,写功能时,应考虑其移植性,复用性:防止一次性代码!
是否可以拿到其它同类事物中应该?是否可以拿到其它系统中应该?
c.
熟练运用继承的思想:
找出应用中相同之处,且不容易发生变化的东西,把它们抽取到抽象类中,让子类去继承它们;
继承的思想,也方便将自己的逻辑建立于别人的成果之上。如ImageField extends JTextField;
熟练运用接口的思想:
找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。
31、阅读源码绝不是从源码工程按顺序一个个的文件,从首行看到尾行。正确而高效地阅读源码的姿态应该是以某一个主线为起点,从上层往底层,不断地追溯,在各个模块、文件、方法之间来回跳转,反复地阅读,理清整个流程的逻辑。同时带着思考去看源码,尝试去揣测作者的用意,去理解代码的精妙之处,去思考代码可能存在的缺陷,去总结优秀的代码设计思想。
32、Android 透过反射启动未安装的APK中的Activity
33、OLED LCD IPS
LED ――Light Emitting Display只是发光二极管
VFD ―― Vacuum Fluorescent Display真空荧光显示屏,显示图像是固定的
LCD ―― Liquid Crystal Display,就是一般的液晶屏了,手机屏大多都是
OLED――Organic Light Emitting Display,即有机发光显示器,OLED无需背光灯,采用非常薄的有机材料涂层和玻璃基板,当有电流通过时,这些有机材料就会发光。OLED显示屏幕比LCD更轻薄