Android个人学习小结2016.11

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/forgot2015/article/details/53463036

仅个人学习小结,部分内容摘自网络,如有侵权,请联系删除,不便之处,敬请原谅

1、nodejs,html5,VI设计
2、android assets文件夹 放在与java res文件夹同级目录下
3、以下引用
“参考苹果的文案,写文字和P图
  我对人话的理解,多数来自苹果文案。苹果对文案定下的套路,已跨越到另一高度。
还记得工作第一位总监跟我说:“如果做文案,就要看你目前能找到的最顶级的商业文字。比如苹果官网,它的每一次更新都值得截屏保存。如果看英语版的广告和书,最好自己翻译。”
不绕弯,直接说一下苹果文案大神给我的文案启示:苹果把AB文案结构做到了极致,把人话说到了极致。”
4、图片处理建议使用Photoshop或者Painter,文字或者矢量图处理时候建议使用CorelDrawer或者Adobe Illustrator,两者可以结合使用,我的习惯是先用PS做好图像部分,再导入Illustrator进行文字输入和排版,因为PS对文字的处理没有Illustrator方便!

高版本的corelDraw能直接打开AI文件,然后另存为 选择9.0cdr格式,让其他版本corelDraw也能打开cdr文件就行了

5、关于公钥私钥,引用
“一、公钥加密

假设一下,我找了两个数字,一个是1,一个是2。我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥。
我有一个文件,不能让别人看,我就用1加密了。别人找到了这个文件,但是他不知道2就是解密的私钥啊,所以他解不开,只有我可以用
数字2,就是我的私钥,来解密。这样我就可以保护数据了。
我的好朋友x用我的公钥1加密了字符a,加密后成了b,放在网上。别人偷到了这个文件,但是别人解不开,因为别人不知道2就是我的私钥,
只有我才能解密,解密后就得到a。这样,我们就可以传送加密的数据了。

二、私钥签名

如果我用私钥加密一段数据(当然只有我可以用私钥加密,因为只有我知道2是我的私钥),结果所有的人都看到我的内容了,因为他们都知
道我的公钥是1,那么这种加密有什么用处呢?
但是我的好朋友x说有人冒充我给他发信。怎么办呢?我把我要发的信,内容是c,用我的私钥2,加密,加密后的内容是d,发给x,再告诉他
解密看是不是c。他用我的公钥1解密,发现果然是c。
这个时候,他会想到,能够用我的公钥解密的数据,必然是用我的私钥加的密。只有我知道我得私钥,因此他就可以确认确实是我发的东西。
这样我们就能确认发送方身份了。这个过程叫做数字签名。当然具体的过程要稍微复杂一些。用私钥来加密数据,用途就是数字签名。

总结:公钥和私钥是成对的,它们互相解密。
公钥加密,私钥解密。
私钥数字签名,公钥验证。
RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。
RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

公钥,就是给大家用的,你可以通过电子邮件发布,可以通过网站让别人下载,公钥其实是用来加密/验章用的。私钥,就是自己的,必须非常小心保存,最好加上 密码,私钥是用来解密/签章,首先就Key的所有权来说,私钥只有个人拥有。公钥与私钥的作用是:用公钥加密的内容只能用私钥解密,用私钥加密的内容只能 用公钥解密。

比如说,我要给你发送一个加密的邮件。首先,我必须拥有你的公钥,你也必须拥有我的公钥。

  首先,我用你的公钥给这个邮件加密,这样就保证这个邮件不被别人看到,而且保证这个邮件在传送过程中没有被修改。你收到邮件后,用你的私钥就可以解密,就能看到内容。
  其次我用我的私钥给这个邮件加密,发送到你手里后,你可以用我的公钥解密。因为私钥只有我手里有,这样就保证了这个邮件是我发送的。

6、j-=d 即 j=j-d
j+=1 j=j+1

7、androidStudio 设置中的copyright 可设置版本信息,填写公司信息等

8、default就是switch语句中没有列出case的所有其他情况。
这是一种安全的编程方式,建议写switch语句一定加default,这样可以防止不进入分支的错误。

9、输入输出流记得关闭,否则可能因此内存泄漏

try{
    URL url = new URL(sMyUrl);
    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
    while ((str = in.readLine()) != null) {
        jsonString += str;
    }
    in.close();}
catch(Exception e){
}

10、android删除文件或目录时,要验证结果

11、Button或者ImageButton的背景设为透明或者半透明
半透明<Button android:background="#e0000000" ... />
透明<Button android:background="#00000000" ... />
透明效果和android:background="@null"一样

12、设置ImageButton 点击背景,只需一张图即可

<ImageButton
    android:id="@+id/title_back"
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:layout_centerVertical="true"
    android:layout_marginLeft="5dp"
    android:background="@drawable/btn_back_normal"
    android:onClick="title_back_btn_accredit"
 android:src="@drawable/normal_rectangle_mask_selector" />

13、Imagebutton和button的区别
Imagebutton继承自ImageView,本质是Image,没有android:text等属性,但有android:src属性
button继承自TextView,本质是View,有android:text等属性,但没有android:src属性

14、关于设置button点击颜色变化,在下面网站,随便点一个颜色,看他的状态栏颜色是什么,点击颜色变化就那个挺好看的
https://www.materialpalette.com/green/teal

15、在开发项目中,xml文件突然出现
Couldn’t resolve resource @color/title_color (58 similar errors not shown)问题,让人措手不及,将颜色等资源文件直接写上就没有问题,但是不是根本解决问题的方法,后来在stack overflow上发现可以这样说:
Android Studio just gets crazy. But a restart ain’t always enough.
Invalidate your caches and restart.
File -> Invalidate Caches / Restart… -> Invalidate and Restart

按照上述做法,效果不错,解决了我的问题,原来AS本身也有缓存

16、设置button圆角,点击变深色

<Button
         android:id="@+id/exitBtn"
         android:layout_width="60dp"
         android:layout_height="60dp"
         android:text="@string/log_out"
         android:textSize="18sp"
         android:textColor="#fff"    android:background="@drawable/btn_circle_rectangle_green"
                  />

btn_circle_rectangle_green代码

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="false">
        <!--设置形状-->
        <shape android:shape="rectangle">
            <!--设置形状颜色-->
            <solid android:color="#4CAF50" />
            <!--设置四个角弧度大小-->
            <corners android:radius="5dp" />
            <!--设置边框厚度和颜色-->
            <stroke android:width="1dp" android:color="#fff" />
            <!-- padding:Button里面的文字与Button边界的间隔 -->
            <!--<padding-->
                <!--android:left="10dp"-->
                <!--android:top="10dp"-->
                <!--android:right="10dp"-->
                <!--android:bottom="10dp"-->
                <!--/>-->
        </shape>
    </item>

    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <solid android:color="#388E3C" />
            <corners android:radius="5dp" />
            <stroke android:width="1dp" android:color="#fff" />
            <!-- padding:Button里面的文字与Button边界的间隔 -->
            <!--<padding-->
                <!--android:left="10dp"-->
                <!--android:top="10dp"-->
                <!--android:right="10dp"-->
                <!--android:bottom="10dp"-->
                <!--/>-->
        </shape>
    </item>


</selector>

17、android studio debug过程中 Watches的使用:
可以添加你想要关注的变量名,然后会根据你的逐步调试 显示该变量的变化情况

18、“代码专家负责纯语言的底层事情,手术刀是用来做业务逻辑的,语言根本不是问题。”

19、1996 年,网景将 JavaScript 提交给ECMA International(欧洲计算机制造商协会)进行标准化,并最终确定出新的语言标准,它就是 ECMAScript。自此,ECMAScript 成为所有 JavaScript 实现的基础,不过,由于 JavaScript 名字的历史原因和市场原因(很显然 ECMAScript 这个名字并不令人喜欢……),现实中我们只用 ECMAScript 称呼标准,平时都还是使用 JavaScript 来称呼这个语言。

* ECMAScript:一个由 ECMA International 进行标准化,TC39 委员会进行监督的语言。通常用于指代标准本身。JavaScript:ECMAScript 标准的各种实现的最常用称呼。这个术语并不局限于某个特定版本的 ECMAScript 规范,并且可能被用于任何不同程度的任意版本的 ECMAScript 的实现。ECMAScript 5 (ES5):ECMAScript 的第五版修订,于 2009 年完成标准化。这个规范在所有现代浏览器中都相当完全的实现了。ECMAScript 6 (ES6) / ECMAScript 2015 (ES2015):ECMAScript 的第六版修订,于 2015 年完成标准化。这个标准被部分实现于大部分现代浏览器。可以查阅这张兼容性表来查看不同浏览器和工具的实现情况。ECMAScript 2016:预计的第七版 ECMAScript 修订,计划于明年夏季发布。这份规范具体将包含哪些特性还没有最终确定ECMAScript Proposals:被考虑加入未来版本 ECMAScript 标准的特性与语法提案,他们需要经历五个阶段:Strawman(稻草人),Proposal(提议),Draft(草案),Candidate(候选)以及 Finished (完成)。

20、.aidl AIDL是一个缩写,全称是Android Interface Definition Language,也就是Android接口定义语言

21、LTS为Long Term Support的简写

22、请记得用 support v7 里的 toolbar,不然只有 API Level 21 也就是 Android 5.0 以上的版本才能使用。

23、产品原型图 查看方法,解压,双击根目录的 index.html即可查看,初次要安装axure插件

24、关于ImageView的src和background属性, 若用src match_parent 则图片保持原样,若用background match_parent 则图片拉伸到全屏 变样了
这里写图片描述

25、android:gravity=”center”
TextView文字内部居中

android:layout_gravity=”center”
TextView整体布局在父控件居中

26、ImageView属性
android:scaleType=”centerInside ”
说明:centerInside表示按比例缩放图片,使得图片长 (宽)的小于等于视图的相应维度。

更详细的scaleType说明:
CENTER /center 在视图中心显示图片,并且不缩放图片
CENTER_CROP / centerCrop 按比例缩放图片,使得图片长 (宽)的大于等于视图的相应维度
CENTER_INSIDE / centerInside 按比例缩放图片,使得图片长 (宽)的小于等于视图的相应维度
FIT_CENTER / fitCenter 按比例缩放图片到视图的最小边,居中显示
FIT_END / fitEnd 按比例缩放图片到视图的最小边,显示在视图的下部分位置
FIT_START / fitStart 把图片按比例扩大/缩小到视图的最小边,显示在视图的上部分位置
FIT_XY / fitXY 把图片不按比例缩放到视图的大小显示
MATRIX / matrix 用矩阵来绘制

27、在.java文件中设置Activity的背景图的两种写法
// getWindow().setBackgroundDrawableResource(R.drawable.bg2);

    Drawable d= getResources().getDrawable(R.drawable.bg2);

    getWindow().setBackgroundDrawable(d);

28、TextView Button等控件 多复用style自定义样式,Donot repeat yourself DRY
但一个控件只能引用一个style,故若要引用两个style,则可以利用style的parent属性,先parent style1,然后在此基础上修改属性

29、
Q:一个orientation为horizontal的LinearLayout中有一个TextView,则设置TextView的layout_gravity属性为right是否有作用
A:水平的LinearLayout要从左边开始依次放置布局,所以设置TextView的layout_gravity属性为right不起作用

30、选中某单词,ctrl+Q,查看文档说明,ctrl+左击,查看源码

31、RelativeLayout布局中的子布局有gravity属性 但没有layout_gravity
因为gravity是代表控件本身的位置,而layout_gravity代表控件在上级layout中的位置,

32、帧布局中先添加的布局在下面,最后添加的布局在最上面,后进先出

33、ctrl+o方法重写及接口
ctrl+j快速模版
ctrl+e最近浏览
ctrl+alt+t弹出surround with模版

34、private Context mContext;
mContext=this;
new Intent(mContext,jjj.class)

35、判断字符串s是否为空
if(s == null || s.length() <= 0);

36、textView中 style优先级没有本身属性高,如以下代码,优先级高的是width height,不管style放的位置先后

<TextView
    style="@style/wrap_wrap"
    android:id="@+id/textView"
    android:layout_width="100dp"
    android:layout_height="60dp"
    android:text="test" />

其他控件类似

37、完全自定义一个Toast

LayoutInflater inflater =LayoutInflater.from(this);
        View toast_view = inflater.inflate(R.layout.mytoast,null);
        Toast toast = new Toast(this);
        toast.setView(toast_view);
        toast.show();

38、Intent和PendingIntent的区别
a. Intent是立即使用的,而PendingIntent可以等到事件发生后触发,PendingIntent可以cancel
b. Intent在程序结束后即终止,而PendingIntent在程序结束后依然有效
c. PendingIntent自带Context,而Intent需要在某个Context内运行
d. Intent在原task中运行,PendingIntent在新的task中运行

39、android动画:
a\Tween Animation 变换动画
b\Frame Animation 帧动画
c\Layout Animation 布局动画
d\Property Animation 属性动画
包含:Alpha: 渐变透明度动画
Scale:渐变尺寸缩放动画
Translate:位置移动动画
Rotate:旋转动画

40、include merge标签 ViewStub

41、sevices 播放音乐,监听操作,运行在主线程

42、windows不区分大小写,如同目录下不能创建两个i I文件, 而linux严格区分大小写,可创建两个i I文件

43、切记,一切可能对系统有风险的行为,都要在虚拟机中执行

44、用友盟等第三方分享 是为了方便统计分享数据等

45、关于zxing二维码白边,只需要改QRCodeWriter.java中的, 改成0则无边,1效果 不错
int qrWidth = inputWidth + 8;
int qrHeight = inputHeight + 8;

46、listview的优化方案一般有三种:
1,如果自定义适配器,那么在getView方法中判断contentView是否为空,如果为空创建contentView并返回,如果不为空直接返回contentView。这样能尽可能少创建view。
2.给contentView设置tag,传入一个viewHoder对象,用于缓存要实现的数据。
3,如果listview中显示的item太多,就要考虑分页加载了。

47、android看不到系统源码的时候,改低一下项目的Compile Sdk Version即可,如api25改为api24,这是因为api25的源码还没下载,android sdk还没开放api25的源码下载

48、

/**只有用 /** 开头的注释 会被javaDoc导出成API网页。*/
而//或是 /*这个不会导出*/

/**

49、解决导出javaDoc时提示编码GBK的不可映射字符,导出Tools-Generate JavaDoc设置界面下方的Other command line arguments添加此句
-encoding UTF-8 -charset UTF-8

50、引用自定义fragment控件时,记得必须要有个id,例如,若没有android:id这句则会报错

fragment
    android:id="@+id/id_frag_top" //若没此句会报错
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:name="com.example.FifthFragment"/>

51、关于button控件英文text会自动全大写的问题,添加一下语句防止大写
android:textAllCaps=”false”

52、
finish是Activity的类,仅仅针对Activity,当调用finish()时,只是将活动推向后台,并没有立即释放内存,活动的资源并没有被清理;当调用System.exit(0)时,杀死了整个进程,这时候活动所占的资源也会被释放。
  其实android的机制决定了用户无法完全退出应用,当你的application最长时间没有被用过的时候,android自身会决定将application关闭了

Activity.finish()
Call this when your activity is done and should be closed.
在你的activity动作完成的时候,或者Activity需要关闭的时候,调用此方法。
当你调用此方法的时候,系统只是将最上面的Activity移出了栈,并没有及时的调用onDestory()方法,其占用的资源也没有被及时释放。因为移出了栈,所以当你点击手机上面的“back”按键的时候,也不会再找到这个Activity。
Activity.onDestory()
the system is temporarily destroying this instance of the activity to save space.
系统销毁了这个Activity的实例在内存中占据的空间。
在Activity的生命周期中,onDestory()方法是他生命的最后一步,资源空间等就被回收了。当重新进入此Activity的时候,必须重新创建,执行onCreate()方法。
System.exit(0)
这玩意是退出整个应用程序的,是针对整个Application的。将整个进程直接KO掉。

53、BroadcaseReceiver生命周期只有十秒左右,在BroadcaseReceiver里不能做一些比较耗时的操作,应该通过发送Intent给Service,由Service来完成,不能使用子线程

54、自定义权限permission

 <uses-permission android:name="com.example.mypermission.RECEIVE" />  

创建两个app,app A ,app B ;
app A中注册了一个BroadcastReceiver ,app B 发送消息
app A和app B的manifest文件中分别声明指定的权限
这样app B 给app A 发送消息,A就可以收到了,若未在app B的manifest文件中声明使用相应的权限,app B发送的消息,A是收不到的。
另外,也可在app B 的manifest文件中声明权限时,添加android:protectionLevel=“signature”,指定app B只能接收到使用同一证书签名的app 发送的消息。

55、Activity 四种状态
1. 活动(Active/Running)状态
当Activity运行在屏幕前台(处于当前任务活动栈的最上面),此时它获取了焦点能响应用户的操作,属于运行状态,同一个时刻只会有一个Activity 处于活动(Active)或运行
(Running)状态
2. 暂停(Paused)状态
当Activity失去焦点但仍对用户可见(如在它之上有另一个透明的Activity或Toast、AlertDialog等弹出窗口时)它处于暂停状态。暂停的Activity仍然是存活状态(它保留着所有的状态和成员信息并保持和窗口管理器的连接),但是当系统内存极小时可以被系统杀掉
3. 停止(Stopped)状态
完全被另一个Activity遮挡时处于停止状态,它仍然保留着所有的状态和成员信息。只是对用户不可见,当其他地方需要内存时它往往被系统杀掉
4. 非活动(Dead)状态
Activity 尚未被启动、已经被手动终止,或已经被系统回收时处于非活动的状态,要手动终止Activity,可以在程序中调用”finish”方法。
如果是(按根据内存不足时的回收规则)被系统回收,可能是因为内存不足了
内存不足时,Dalvak 虚拟机会根据其内存回收规则来回收内存:
1. 先回收与其他Activity 或Service/Intent Receiver 无关的进程(即优先回收独
立的Activity)因此建议,我们的一些(耗时)后台操作,最好是作成Service的形式
2.不可见(处于Stopped状态的)Activity
3.Service进程(除非真的没有内存可用时会被销毁)
4.非活动的可见的(Paused状态的)Activity
5.当前正在运行(Active/Running状态的)Activity

56、service生命周期
service生命周期

展开阅读全文

没有更多推荐了,返回首页