Android学习笔记一

1、64位Android Studio打开的是studio64.exe,不是studio.exe。

2、ctrl+alt+t快捷键调出 try catch模块

Alt+回车 自动生成              alt+enter查看出错的建议解决方法

ctrl+alt+m 会将选定的代码封装成方法提出来

(Ctrl+R || Ctrl+H)“替换”名字功能

http://hukai.me/android-training-course-in-chinese/index.html#userconsent#

按住“shift”键再按下“\”键可以打出||

3、快捷键

http://www.android-studio.org/index.php/docs/experience/142-androidstudio-shortcut-keys

4、AIDLAndroid接口定义语言)的使用范围:IPC  多个应用程序  多线程

Binder的使用范围:只有IPC(进程间通信)  多个应用程序  没有多线程

Messenger的使用范围:只有IPC  没有多线程

即想要通过IPC让多个应用程序来访问你的服务,并且该服务处理多线程时才有必要用AIDL

android studio创建AIDL服务具体步骤如下

http://www.gezila.com/tutorials/58289.html

Android Studio默认是不编译的,没有自动编译,想要得到生成对应的aidl文件需要去编译一下即点图标

IRemoteServiceextends Service

5如何在androidstudio中查看当前使用的gradle版本和gradle插件版本?

http://www.zhihu.com/question/24648316

将Eclipse代码导入到AndroidStudio的方式

http://www.open-open.com/lib/view/open1419597450031.html

6GitCode

http://www.android-doc.com/guide/components/index.html?q=aidl#q=aidl

7、 Layout_开头的布局属性都是交给父容器的,没有Layout_开头的都是本身的属性。

LinearLayout中的Layout_weight属性,首先按照控件声明的尺寸进行分配,然后再将剩下的尺寸按weight分配。即首先减去控件声明的尺寸,剩下的尺寸按比例分配。

8、Monkey runner

 Monkey runner和 Monkey是Android SDK中自带的两个测试工具。monkey主要应用在压力和可靠性测试上,运行该命令可以随机地向目标程序发送各种模拟键盘事件流,并且可以自己定义发送的次数,以此观察被测应用程序的稳定性和可靠性,应用起来也比较简单,记住那几个命令就行了。而monkeyrunner呢,相比之下会强大一些,它主要可应用于功能测试,回归测试,并且可以自定义测试扩展,灵活性较强,并且测试人员可以完全控制。

http://blog.csdn.net/zm2714/article/details/7980634

http://www.linuxdiyf.com/linux/18510.html

http://www.xuebuyuan.com/1613688.html

9Android安全

http://www.cnblogs.com/aimeng/p/3361348.html

http://blog.csdn.net/asmcvc/article/details/11595783系列文章

10android studio中如何导入github项目

不用换gradle版本号或全部拷贝下载源码,只需要按照githubread.me介绍的步骤一步一步做,然后调错直到改好就行。

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0623/3097.html

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0623/3097.html

http://blog.csdn.net/j236027367/article/details/48802493

http://blog.isming.me/2014/12/12/import-library-to-android-studio/

11、学习

http://blog.csdn.net/shenyuanqing/article/details/47682025(AS中导入GitHub开源项目SlidingMenu

http://jingyan.baidu.com/article/48206aeafc002b216bd6b35d.html(讲述如何开发一个用户登录界面

http://www.cnblogs.com/aimeng/p/3361348.htmlandroid手机卫士)

12 XutilsXutils3的基本使用

Xutils是Android的第三方开源框架,包含了很多实用的Android工具类。

http://blog.csdn.net/abc6368765/article/details/50699334

http://blog.csdn.net/wangsidadehao/article/details/50757211

http://www.cnblogs.com/dreamos/p/5010821.html

13、在实现从欢迎界面到主界面跳转时:

注意:MainActivity中xml文件有2个(一个调用另一个),要生成无用的那个,直接用有用的那个xml布局,不然会一直崩溃。

14、进入主界面之后实现Tabs滑动切换

http://blog.csdn.net/liguojin1230/article/details/45568185

http://blog.163.com/shexinyang@126/blog/static/13673931220157552844552/

见慕课网http://www.imooc.com/course/list?c=android&page=3

http://www.jcodecraeer.com/a/opensource/2016/0518/4272.html

15、优化Android布局include、merge 、ViewStub

http://blog.csdn.net/xyz_lmn/article/details/14524567

16、build.gradle中jcenter():
两个标准的Android library文件服务器:jcenter   Maven Central。不管是jcenter还是Maven Central ,两者都是Maven仓库。虽然jcenterMaven Central 都是标准的 android library仓库,但是它们维护在完全不同的服务器上,由不同的人提供内容,两者之间毫无关系
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0623/3097.html
17、Android中UI线程与后台线程交互设计的几种方法
http://blog.csdn.net/yony2011/article/details/11952735
1handler  2AsyncTask  3View.PostDelayed(Runnabe,long)  4View.Post(Runnable)  5Activity.runOnUIThread(Runnable)
http://www.cnblogs.com/devinzhang/archive/2011/12/30/2306980.html
http://blog.csdn.net/amazing7/article/details/51424038
http://www.jb51.net/article/43360.htm
 
18Android网络(3):HttpClient作客户端,Tomcat Servlet作服务器的交互示例
http://blog.chinaunix.net/uid-25799257-id-3774047.html(前端Android发送请求,这里URL=http://10.81.98.120:8080/TaxiServlet/ login)
http://blog.chinaunix.net/uid-25799257-id-3774015.html
后台处理,这里后台项目为TaxiServlet)
其中在前端Android中根据输入的用户名和密码,得到并封 Map<String, String> params = new HashMap<String, String>();
    params.put("user_name", userName);
params.put("password", password);
String encode = "utf-8";
然后调用HttpUtils 工具类的sendMessage(params, encode)方法发送请求。int responseCode = HttpUtils.sendMessage(params, encode);得到HttpUtils类返回的响应码(注意此处得到的是HttpUtils类返回的数据,不是由网络直接返回的数据),进行判断和后续处理操作。
HttpUtils 类中封装的有对数据上传网络的统一的步骤和格式。比如:
     private final static String PATH = "http://10.0.2.2:8000/TaxiServlet/login";
HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();

urlConnection.setConnectTimeout(3000);

urlConnection.setRequestMethod("POST");    ///< 设置请求方式

urlConnection.setDoInput(true);            ///< 表示从服务器获取数据

 urlConnection.setDoOutput(true);        ///< 表示向服务器发送数据

 

最后就能 ///< 获得服务器的响应结果和状态码

                   int responseCode = urlConnection.getResponseCode();

                    //System.out.println(""+ responseCode);

                    if (200 == responseCode)

                    { return changeInputStream(urlConnection.getInputStream(), encode); }

根据得到的网络返回的数据urlConnection.getInputStream()进行自己定义的changeInputStream()方法处理返回给Android端调用此方法处。至此,从前端Android到网络URL处已打通。

1.   在后台,因为URL= http://10.81.98.120:8080/TaxiServlet/login,故需去找部署在http://10.81.98.120:8080/处的TaxiServlet项目。本次用的tomcat部署在自己的电脑上,连的WLAN的网络地址为10.81.98.120localhost。在TaxiServlet项目中的web.xml中设置<web-app>

2.       <servlet>

3.           <servlet-name>login</servlet-name>    <!-- 名字随便 -->

4.           <servlet-class>com.servlet.login.LoginAction</servlet-class>    <!-- servlet类名-->

5.       </servlet>

6.    

7.       <servlet-mapping>

8.           <servlet-name>login</servlet-name>

9.           <url-pattern>/login</url-pattern>    <!-- url访问虚拟路径,最后我们就是通过工程名/login进行访问的,像这样http://127.0.0.1:8000/LoginAction/login-->

10.      </servlet-mapping>

1.   注意url-pattern(url访问虚拟路径)URL地址一致,都是/login。故转到相同servlet-nameservlet-classcom.servlet.login.LoginAction类中进行后台数据的处理。在后台LoginAction类中因为前端用post方法上传,故也用post解析处理, 

2.           PrintWriter out = res.getWriter();

3.           String username = req.getParameter("user_name");

4.           String password = req.getParameter("password");

由解析得到的数据(这里是 usernamepassword)给出判断处理,并最后又out给出返回的响应。至此,后端也打通了。整个过程通过Android端的主界面类LoginActivity.javaHttpUtils.java工具类,以及后台的LoginAction主类,三个类串联打通。
http://blog.csdn.net/yanzi1225627/article/details/24882569
trim  修剪,整理,整齐的,整洁的,苗条的
trim() 这是一个很常见的函数,他的所用是去掉字符序列左边和右边的空格,中间的空格他不管。
19SparseArray<E>        GrowingArrayUtils
http://blog.csdn.net/xyz_fly/article/details/7931943
http://blog.csdn.net/u013493809/article/details/21699121
http://blog.csdn.net/xueshanhaizi/article/details/51045750
20、数据存储
五种方式:

第一种: 使用SharedPreferences存储数据

适用于存储信息量小的操作。本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。具有操作和存储简便,代码简单的特点。其存储位置在/data/data/<包名>/shared_prefs目录下。
SharedPreferences对象与SQLite数据库相比,免去了创建数据库,创建表,写SQL语句等诸多操作,相对而言更加方便,简洁。但是SharedPreferences也有其自身缺陷,比如其只能存储booleanintfloatlongString五种简单的数据类型,无法进行条件查询等。

第二种:文件存储数据

文件可用来存放大量数据,如文本、图片、音频等。通过SD卡等磁盘介质存储,这类一般都是存成文件的形式。适用于存储信息量大,操作相对复杂些。默认位置:/data/data/<>/files/***.***。通过点击Eclipse菜单“Window”-“Show View”-“Other”,在对话窗口中展开android文件夹,选择下面的File Explorer视图,然后在File Explorer视图中展开/data/data/<package name>/files目录就可以看到该文件。
使用ActivityopenFileOutput()方法保存文件,文件是存放在手机空间上,一般手机的存储空间不是很大,存放些小文件还行,如果要存放像视频这样的大文件,是不可行的。对于像视频这样的大文件,我们可以把它存放在SDCard

第三种: SQLite数据库存储数据

通过数据库,一般都是sqlite的方式进行存储,适用于存储信息量适中,这类存储在查询的时候比较方便。而且能很好的支持SQL语句。SQLite 由以下几个组件组成:SQL 编译器、内核、后端以及附件。数据库存储在 data/< 项目文件夹 >/databases/ 下。在 Android 应用程序中使用 SQLite,必须自己创建数据库,然后创建表、索引,填充数据。

第四种:使用ContentProvider存储数据

一个Content Provider类实现了一组标准的方法接口,从而能够让其他的应用保存或读取此Content Provider的各种数据类型。ContentProviders是以类似数据库中表的方式将数据暴露,也就是说ContentProvider就像一个数据库Content Provider是个实现了一组用于提供其他应用程序存取数据的标准方法的类。应用程序可以在Content Provider中执行如下操作: 查询数据修改数据添加数据删除数据。大多数Content Provider使用Android文件系统或SQLite数据库来保持数据,但是你也可以以任何你想要的方式来存储。在AndroidMenifest.xml中使用标签来设置Content Provider

第五种: 网络存储数据

前面介绍的几种存储都是将数据存储在本地设备上,除此之外,还有一种存储(获取)数据的方式,通过网络来实现数据的存储和获取。通过网络方式存储到其他服务器,这类一般适用于CS方式,且存储数据需要集中存储,具有联网的性质。比如网游或者复杂应用。
http://zhidao.baidu.com/link?url=Ink6EqUgQoZqy_nMngc-6UJuiSXY0oM-dwqciD59PdULzUGCYbOs9GKbYUigIy12G2hlSNxWt2v1JxhJ7XZvnVOn42cLFSwyUm_z9vOPVfm 
http://blog.csdn.net/amazing7/article/details/51437435
http://www.codeceo.com/article/5-android-storage.html
http://www.cnblogs.com/ITtangtang/p/3920916.html
21 Android 缓存机制
http://blog.csdn.net/amazing7/article/details/51353817
22 1NavigationView导航侧滑菜单
http://blog.csdn.net/lmj623565791/article/details/46405409
2ActionBar
http://www.tuicool.com/articles/ERvAfyn
http://www.cnblogs.com/yc-755909659/p/4290784.html
http://blog.csdn.net/bigconvience/article/details/28907833
3CoordinatorLayout 
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0717/3196.html
4CoordinatorLayout+AppBarLayout实现上滑隐藏
http://blog.csdn.net/u010687392/article/details/46852565
5Toolbar
http://blog.csdn.net/jdsjlzx/article/details/41441083/
http://www.codeceo.com/article/android-toolbar-develop.html
6http://blog.csdn.net/feiduclear_up/article/details/46514791
http://www.open-open.com/lib/view/open1433385856119.html
23MVC  MVP
http://blog.csdn.net/feiduclear_up/article/details/46363207

 
 
 
 
MVC框架图 



MVP框架图
M层是逻辑操作层,P从V(activity)拿到数据交给M处理。
http://blog.csdn.net/feiduclear_up/article/details/46374653
MPV 是从经典的MVC模式演变过来的,PMVC中的C担当的角色相似。从上面的框架图可以看出MVCMVP最大的区别就是 ModelView之间的关系。在MVC框架中,View是可以直接读取Model模型中的数据的,Model模型数据发生改变是会通知View数据显示发生相应的改变。而在MVPModelView之间的没有任何联系,是两个完全独立的模块,当Model模型发生数据改变时,通过Presenter通知View视图发生相应的UI改变。因此,个人觉得:MVP才是真正的视图和模型完全分离,也就是Model模型进行业务数据处理和View视图显示没有任何关联。

24Volley

谷歌自己推出来的Volley网络请求框架就是遵循MVC框架的。我们可以理解为Volley框架是MVC当中的模型,也就是网络数据处理这一块,无需跟View视图有任何关联。也符合视图和模型分离。现在代码中的网络请求是使用Volley框架来实现的。

http://blog.csdn.net/guolin_blog/article/details/17482095
http://blog.csdn.net/a910626/article/details/46664661
VolleyRequest.newInstance().newGsonRequest();
25、RecyclerView
使用RecylerView必须导入support-v7包,是一个强大的滑动组件,是ListView的升级版。
http://blog.csdn.net/dmk877/article/details/50816933
http://blog.csdn.net/lmj623565791/article/details/45059587

26ListView

 列表的显示需要三个元素:

1.ListVeiw 用来展示列表的View。

2.适配器 用来把数据映射到ListView上的中介。

3.数据    具体的将被映射的字符串,图片,或者基本组件。

根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter

其中以ArrayAdapter最为简单,只能展示一行字。SimpleAdapter有最好的扩充性,可以自定义出各种效果。SimpleCursorAdapter可以认为是SimpleAdapter对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来。

http://www.cnblogs.com/allin/archive/2010/05/11/1732200.html
http://www.cnblogs.com/caoRM/p/3752804.html
27、Bundle
两个activity之间的通讯可以通过bundle类来实现。
http://blog.csdn.net/randyjiawenjie/article/details/6651437
28android:imeOptions="actionGo"
http://blog.csdn.net/wqjsir/article/details/22901651
http://www.cnblogs.com/mingfeng002/archive/2013/08/07/3243082.html
29搜索框(SearchView
http://my.oschina.net/summerpxy/blog/175061
http://www.2cto.com/kf/201502/376368.html
30、反射
反射机制: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。  JAVA的反射是指,可以通过一个类名来探察这个类里面的信息,比如说类的属性名,属性名的修饰符,方法名,方法返回值,方法修饰符等等。   
getDeclaredFields()获得某个类的所有申明的字段,即包括public、private和proteced,但是不包括父类的申明字段。
getFields()获得某个类的所有的公共(public)的字段,包括父类。 
http://blog.csdn.net/liujiahan629629/article/details/18013523
Java反射机制主要提供了以下功能:在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
31、Android中Cursor类的概念和用法
http://www.cnblogs.com/TerryBlog/archive/2010/07/05/1771459.html
http://www.iteye.com/topic/649874
在Android 查询数据是通过Cursor 类来实现的。当我们使用 SQLiteDatabase.query()方法时,就会得到Cursor对象, Cursor所指向的就是每一条数据。

SimpleCursorAdapter,是用于将Cursor中的columns与XML文件中定义的TextView或者ImageView进行匹配的Adapter。是CursorAdapter的子类。Cursor是指从数据库表中得到的数据集合。Cursor 是每行的集合。

SimpleCursorAdapter和SimpleAdapter最大的区别就是

(1)前者是用Cursor表示数据,后者用List<Map<String,Object>>表示数据;

(2)前者的查询语句的主键必须要为"_id";

 

 

32、android data/data/ 目录下的文件 

android data/data/ 目录下的文件占用系统存储空间,不占用运行内存,是系统数据文件夹。关于android data/data/ 目录说明如下:
  android data/data/ 目录是应用程序在运行的过程中如果需要向手机上保存的数据,一般是把数据保存在SDcard中的。大部分应用是直接在SDCard的根目录下创建一个文件夹,然后把数据保存在该文件夹中。如果想清除数据方法如下:
  1、卸载应用:当你的应用在被用户卸载后,SDCard/Android/data/你的应用的包名/ 这个目录下的所有文件都会被删除,不会留下垃圾信息。内部存储路径为/data/data/youPackageName/,所有内部存储中保存的文件在用户卸载应用的时候会被删除。
  2、打开设置->应用->应用详情里面的”清除数据“与”清除缓存“选项

要在android studio中打开data/data/ 目录需要在连接模拟器或真机的情况下,


一、 files
1. Context.getFilesDir(),该方法返回/data/data/youPackageName/files的File对象。
2. Context.openFileInput()与Context.openFileOutput(),只能读取和写入files下的文件,返回的是FileInputStream和FileOutputStream对象。
3. Context.fileList(),返回files下所有的文件名,返回的是String[]对象。
4. Context.deleteFile(String),删除files下指定名称的文件。


二、cache
1. Context.getCacheDir(),该方法返回/data/data/youPackageName/cache的File对象。

三、custom dir

getDir(Stringname, int mode),返回/data/data/youPackageName/下的指定名称的文件夹File对象,如果该文件夹不存在则用指定名称创建一个新的文件夹。

33、Android系统中,如果需要使用数据库的话,我们一般会使用SQLLite数据库,同时将数据库放在res\raw目录下,这样方便发布系统的时候,将数据库一同发布。

在系统中对数据库进行访问的时候,我们则一般会将数据库拷贝到我们data/data目前下的我们当前包的名称的目录下,这样更方便我们进行操作。

34PendingIntent
intent英文意思是意图,pending表示即将发生或来临的事情。 
PendingIntent这个类用于处理即将发生的事情。比如在通知Notification中用于跳转页面,但不是马上跳转。 
Intent 是及时启动,intent 随所在的activity 消失而消失。
PendingIntent 可以看作是对intent的一个包装,通常通过getActivity,getBroadcast ,getService来得到pendingintent的实例,当前activity并不能马上启动它所包含的intent,而是在外部执行 pendingintent时,调用intent的。常和alermanger notificationmanager一起使用。 
Intent一般是用作ActivitySercviceBroadcastReceiver之间传递数据,而Pendingintent,一般用在 Notification上,可以理解为延迟执行的intent
http://blog.csdn.net/yuzhiboyi/article/details/8484771
---------------------------------------------------
35、MySQL常见知识点笔记
http://www.cnblogs.com/shockerli/p/1000-plus-line-mysql-notes.html
36randomaccessfile
http://www.2cto.com/kf/201208/149816.html
http://blog.csdn.net/akon_vm/article/details/7429245
http://blog.csdn.net/czplplp_900725/article/details/37809579
37、反编译
http://zhidao.baidu.com/link?url=JcTf7emA6OdgdfORtjugy4D6I5n9aSIr3Ue4mnVwuoc-4zVl9LbqcFvjMCQVfIuvEz1G_cQDQh1VhpIzYKy7Ixxn0OXp69sze4g5-fi5CGO
apktool + dex2jar + jd-gui
 apktool 作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看 。 dex2jar作用:将apk反编译成java源码(classes.dex转化成jar文件)。JD-GUI是一个反编译工具,可以直接查看Jar包的源代码。
http://blog.csdn.net/vipzjyno1/article/details/21039349/
下载:http://download.csdn.net/download/maohui3028/9147907
 
38、近期学习安排 2016/8/10
1、博客逐篇看完+代码搞懂http://blog.csdn.net/guolin_blog?viewmode=contents
2、《疯狂Android讲义》划线的看完
3、《SQL必知必会》看完
4、《Android应用开发》看完一个完整案例
5、《Java编程思想》划线的看完+“Java面试训练”APP刷题
6、JavaScript+Swing+CSS+HTML5   
7、Android工程师路线图http://www.imooc.com/course/programdetail/pid/33
8、android框架http://www.jb51.net/article/51052.htm
9、找工作的要求
---------------------------------------------------
一、《Android应用开发》
音乐盒:
1、JFrame
javaGUI程序的基本思路是以JFrame为基础,它是屏幕上window的对象,能够最大化、最小化、关闭。Swing 的三个基本构造块:标签、按钮和文本字段;但是需要个地方安放它们,并希望用户知道如何处理它们。JFrame 类就是解决这个问题的——它是一个容器,允许程序员把其他组件添加到它里面,把它们组织起来,并把它们呈现给用户。 
2、JPanel
JPanel  Java图形用户界面(GUI)工具包swing中的面板容器类,包含在javax.swing 包中,是一种轻量级容器,可以加入到JFrame窗体中。JPanel默认的布局管理器是FlowLayout,其自身可以嵌套组合,在不同子容器中可包含其他组件(component),JButtonJTextAreaJTextField 等,功能是对窗体中具有相同逻辑功能的组件进行组合。

3JFameJPanel的容器。可以添加JPanelJFame中,然后通过JFamede setBounds(x,y,width,high)方法设置JPanel面板的位置和大小。而JFame自己可以通过setTitle()方法设置标题。

4、ActionListener
ActionListenerswing中的知识,通常是在进行某一个操作的时候触发某项功能。Java中关于事件处理的一个接口,继承自EventListenerActionListener用于接收操作事件的侦听器接口。对处理操作事件感兴趣的类可以实现此接口,而使用该类创建的对象可使用组件的 addActionListener 方法向该组件注册。在发生操作事件时,调用该对象的 actionPerformed 方法。
5、JLabel

JLabel 对象可以显示文本、图像或同时显示二者。可以通过设置垂直和水平对齐方式,指定标签显示区中标签内容在何处对齐。默认情况下,标签在其显示区内垂直居中对齐。默认情况下,只显示文本的标签是开始边对齐;而只显示图像的标签则水平居中对齐。 还可以指定文本相对于图像的位置。默认情况下,文本位于图像的结尾边上,文本和图像都垂直对齐。

http://outofmemory.cn/code-snippet/1121/swing-JLabel-explain-in-detail-yiji-usage-shili

6、JOptionPane
JOptionPane.showMessageDialog(null,”消息”);
相当于Toast,用于提示消息
7、DefaultMutableTreeNode
8、CardLayout  卡片布局

static CardLayout cl=new CardLayout();

static JPanel jall=new JPanel();
JScrollPane jspy=new JScrollPane(jall);       

jall.setLayout(cl); //设置成卡片布局

//向该JPanel布局中分别添加 空的,音乐,歌手,专辑

jall.add(jempty,"jempty");

jall.add(jmusicmanage,"jmusicmanage");  ……
9、JComboBox

JComboBox类是一个组件,它结合了一个按钮或可编辑字段与下拉列表。JList和ComboBox很相似,因为这两个组件都显示一个项列表。因此,它们都有扩展ListModel接口的模型。而且,这两个组件都有绘制器,这些绘制器通过实现ListCellBenderer接口来绘制列表单元。


10、TableColumn
TableColumn 表示 JTable 中列的所有属性,如宽度、大小可调整性、最小和最大宽度。此外,TableColumn 还为显示和编辑此列中值的渲染器和编辑器提供了位置。还可以基于每种类型,而不是每列来指定渲染器和编辑器,请参阅 JTable 类中的 setDefaultRenderer 方法。此默认机制仅用于 TableColumn 中的渲染器(或编辑器)为 null 的情况。
TableColumn 存储 JTable 中各列与 TableModel 中各列之间的链接。modelIndex  TableModel 中的列,要获得此列中单元格的数据值,可对 modelIndex 进行查询。在视图中移动列时,此 modelIndex 不更改。
注:某些实现可能假定所有 TableColumnModel 都是唯一的,因此我们建议不要多次将同一TableColumn 实例添加到 TableColumnModel 中。要从模型中显示具有相同数据列的TableColumn,可创建具有相同 modelIndex 的新实例。
TableColumn .setPreferredWidth设置每列的宽度。
11、JFileChooserJava Swing提供的文件选择对话框
JFileChooser 这个是文件选择器

JFileChooser() 构造一个指向用户默认目录的 JFileChooser

JFileChooser(File currentDirectory)   使用给定的 File 作为路径来构造一个 JFileChooser

http://blog.csdn.net/liang5630/article/details/25651491

12、FileNameExtensionFilter

FileNameExtensionFilter 这个是文件过滤器,过滤设置的格式。
 FileFilter 的一个实现,它使用指定的扩展名集合进行过滤。文件的扩展名是指文件名最后一个“.”后面的部分。名称不包含“.”的文件没有文件扩展名。文件扩展名的比较不区分大小写。   

13、JTextField

    

14、BorderLayout 边界布局

 

http://blog.csdn.net/liujun13579/article/details/7772215

BorderLayout.CENTER

15、intent.getintextra("参数",值)

Activity之间传参的,启动的那个,Intent.putExtra,然后再startIntent
被启动的那个getIntent().getXXXXExtra(),如果这里的名称和数据类型都互相符合,第二个Activity就能取到值了。

:第一个是传的参数的名字,主要靠这个名字区别各个参数。第二个是默认值,如果没取到值,就按默认值来。

16、android mediaplayer中seekTo()方法用法

   在使用音频时,需要用到MediaPlayer。seekto方法是异步方法,设置播放进度,参数是毫秒。

17、SharedPreferences sp = ms.get SharedPreferences(“第一个参数”,第二个参数)

第一个参数是存储时的名称,指定保存文件时的文件名称。第二个参数则是文件的打开方式。数据会保存到 /data/data/ [packagename]/shared_prefs目录下。相当于Web中的一个小小的Cookie。 调用Context对象的getSharedPreferences()方法获得的SharedPreferences对象可以被同一应用程序下的其他组件共享。

 在程序中保存一些配置参数的时候我们经常使用SharedPreferences。很多时候我们开发的软件需要向用户提供软件参数设置功能,例如我们常用的QQ,用户可以设置是否允许陌生人添加自己为好友。对于软件配置参数的保存,如果是window软件通常我们会采用ini文件进行保存,如果是j2se应用,我们会采用properties属性文件或者xml进行保存。如果是Android应用,我们最适合采用Android平台给我们提供的SharedPreferences类来保存软件配置参数。它是一个轻量级的存储类,特别适合用于保存软件配置参数。使用SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/<packagename>/shared_prefs目录下。

18可以通过Environment.getExternalStorageDirectory()获取当前SDCard位置。

通过Environment.getExternalStorageState()方法获取SDCard当前状态。

如果要打开存放在/data/data/<packagename>/files目录应用私有的文件,可以使用Activity提供openFileInput()方法。

19、Pattern和Matcher是正则表达式中的两个类

java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。Regex正则表达式)。它包括两个类:Pattern和Matcher。

Pattern: 一个Pattern是一个正则表达式经编译后的表现模式。 

Matcher: 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查。

首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作。

例如:  String patternStr = "(.)*([0-9]{2}):([0-9]{2}).([0-9]{2})(.)*";                                             Pattern p = Pattern.compile(patternStr);//将正则表达式patternStr编译并赋予给Pattern类

Matcher m =p.matcher(strTemp);

if (m.matches()) {}

http://www.cnblogs.com/playing/archive/2011/03/15/1984943.html

20音乐播放器

kugoumusic.ACTION_CONTROL
kugoumusic.WIDGET_STATUS
21、objectAnimator

Android 属性动画 ObjectAnimator 类是ValueAnimator的子类,他本身就已经包含了时间引擎和值计算,所以它拥有为对象的某个属性设置动画的功能。

http://www.it165.net/pro/html/201505/41670.html

http://www.netfoucs.com/article/x359981514/92198.html

22、拖动条SeekBar

拖动条(SeekBar)组件与ProgressBar水平形式的显示进度条类似,不过其最大的区别在于,拖动条可以由用户自己进行手工的调节,例如当用户需要调整播放器音量或者电影的播放速度都会使用到拖动条SeekBar类。

http://blog.chinaunix.net/uid-25153965-id-161106.html

23AndroidActivityFragment的转场动画

http://www.cnblogs.com/mengdd/p/3494041.html
---------------------------------------------------
二、克胜扫码器开发

1Github上二维码扫描器代码

https://github.com/search?p=1&q=%E4%BA%8C%E7%BB%B4%E7%A0%81%E6%89%AB%E6%8F%8F%E5%99%A8&ref=searchresults&type=Repositories&utf8=%E2%9C%93

2<intent-filter android:priority="1000" />
BroadcastReceiver里的相关内容。
1. 优先级的概念用于描述控件的 intent的filter的类型。 这个属性只对activity 和 receivers 是有意义的。
2. 隐式调用activity的情况下: 如果多个activity 满足响应 的条件,   系统只会触发 priority 高的那个activity。
3. 有序广播发出的情况下:如果多个receiver满足响应的条件,系统会优先触发prioriyt搞的那个receiver。
4. priority 必须是整数,默认是0    范围是[-1000, 1000]
http://blog.csdn.net/liuhe688/article/details/6955668

3ViewConfiguration这个类主要定义了UI中所使用到的标准常量,像超时、尺寸、距离等

4native   JNI

在java中native是关键字。它一般在本地声明,异地用C和C++来实现。它的声明有几点要注意:1)native与访问控制符前后的关系不受限制。2)必须在返回类型之前。3)它一般为非抽象类方法。4)native方法在异地实现,象抽象方法一样,所以没有方法体,以分号结束。
JNI是Java Native Interface的缩写,中文为JAVA本地调用。它允许Java代码和其他语言写的代码进行交互。

http://blog.csdn.net/a491057947/article/details/31448411

5Android中的5种数据存储方式

(1)使用SharedPreferences存储数据;

采用了Map数据结构来存储数据,以键值的方式存储。

(2)文件存储数据;

文件存储方式是一种较常用的方法,在Android中读取/写入文件的方法,与Java中实现I/O的程序是完全一样的,提供了openFileInput()和openFileOutput()方法来读取设备上的文件。

(3)SQLite数据库存储数据;
(4) 使用ContentProvider存储数据;
当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。
(5) 网络存储数据;
Preference,File, DataBase这三种方式分别对应的目录是/data/data/Package Name/Shared_Pref, /data/data/Package Name/files, /data/data/Package Name/database 。

http://www.cnblogs.com/cmduan/archive/2012/03/06/2382006.html

6、基于Android开发多媒体和游戏应用时,可能会挺经常出现Out Of Memory 异常 ,顾名思义这个异常是说你的内存不够用或者耗尽了。

       在Android中,一个Process 只能使用16M内存,如果超过了这个限制就会跳出这个异常。这样就要求我们要时刻想着释放资源。Java的回收工作是交给GC的。

 在Android中:

      1.一个进程的内存可以由2个部分组成:java 使用内存,C 使用内存 ,这两个内存的和必须小于16M,不然就会出现大家熟悉的OOM,这个就是第一种OOM的情况。

      2.更加奇怪的是这个:一旦内存分配给Java后,以后这块内存即使释放后,也只能给Java的使用,这个估计跟java虚拟机里把内存分成好几块进行缓存的原因有关,反正C就别想用到这块的内存了,所以如果Java突然占用了一个大块内存,即使很快释放了:

       C能使用的内存 = 16M - Java某一瞬间占用的最大内存。

      而Bitmap的生成是通过malloc进行内存分配的,占用的是C的内存。16M是怎么来的?算是实验来的吧,每个机型不一样,模拟器不同版本也不一样,可以通过:
Runtime.getMaxMemory() 来查看。

http://www.cnblogs.com/wanqieddy/archive/2012/07/18/2597471.html

 

7、开源框架

(1)Volley

http://blog.csdn.net/guolin_blog/article/details/17482095

StringRequestJsonRequest的用法:

1、    导入volley.jar

2、     创建一个RequestQueue对象。

3、     创建一个Request对象。

4、     Request对象添加到RequestQueue里面。

(2)xUtils

1DbUtils模块   2ViewUtils模块  3HttpUtils模块   4BitmapUtils模块

http://www.jcodecraeer.com/a/opensource/2014/1113/1971.html

(3)ThinkAndroid

1MVC模块   2ioc模块  3、数据库模块   4http模块   5、缓存模块   6、图片缓存模块

7、配置器模块  8、日志打印模块   9、下载器模块   10、网络状态检测模块

https://github.com/white-cat/ThinkAndroid

 

14、常见框架

网络框架:okhttp、volley、android-async-http
图片框架:Picasso、Fresco、Glide、Android-Universal-Image-Loader
缓存框架:DiskLruCache、 Robospice
Json解析:Gson、Jackson、Fastjson
事件总线:EventBus、Otto
ORM框架:GreenDAO

开源代码http://www.jcodecraeer.com/plus/list.php?tid=31               http://www.itlanbao.com/codes.aspx#1,0

SooPAT专利搜索http://www2.soopat.com/#userconsent#

8、  Android APK反编译

一、       apk反编译得到程序的源代码、图片、XML配置、语言资源等文件

二、       apk反编译得到Java源代码

三、       图形化反编译apk

classes.dex文件是java文件编译再通过dx工具打包而成的。

被混淆过的类文件名称以及里面的方法名称被反编译之后都会以a,b,c....之类的样式命名显示。

http://blog.csdn.net/vipzjyno1/article/details/21039349/

9、文件保存

Android中文件相关的操作:
openFileOutput(filename, mode)      打开文件输出流,就是往文件中写入数据,第二参数是模式,就是操作权限
openFileIntut(filename)                打开文件输入流,将文件中的信息读取到程序中
getDir(name, mode)              在app的data目录下获取或创建name对应的子目录
getFileDir()           获得app的data目录的file目录的绝对路径
String[] fileList()         返回app的data目录下的全部文件
deleteFile(filename)       删除app的data目录下指定的文件 
文件的操作权限:
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件 
Context.MODE_PRIVATE:可写为0,私有方法,只有创建这个文件的程序才能访问,写入的数据会覆盖原文件的内容 
Context.MODE_WORLD_READABLE:可写为2当前文件可被其他文件读取 
Context.MODE_WORLD_WRITEABLE:可写为1,当前文件可被其他文件读取和写稿
openFileOutput()方法的第一参数用于指定文件名称,不能包含路径分隔符"/" ,如果文件不存在,Android 会自动创建它。创建的文件保存在/data/data/<package name>/files目录,如: /data/data/cn.itcast.action/files/itcast.txt ,通过点击Eclipse菜单"Window"-"Show View"-"Other",在对话窗口中展开android文件夹,选择下面的File Explorer视图,然后在File Explorer视图中展开/data/data/<package name>/files目录就可以看到该文件。

http://test-touch.iteye.com/blog/1573489

http://www.verydemo.com/demo_c131_i4081.html

http://blog.csdn.net/wu_wxc/article/details/49448977

http://www.jb51.net/article/79218.htm

10Word很多页怎么快速直接跳转到自己想看的那一页

Ctr+G调出【定位】对话框,输入页数,回车确定即可跳转到相应页数。

11ListView

http://www.cnblogs.com/allin/archive/2010/05/11/1732200.html

http://my.csdn.net/sinyu890807

12serialport

serial port,即串行端口,现在大多数硬件设备均采用串口技术与计算机相连,因此串口的应用程序开发越来越普遍。例如,在计算机没有安装网卡的情况下,将本机上的一些信息数据 传输到另一台计算机上,那么利用串口通信就可以实现。

13android:autoLink

显示URL链接
   TextView识别链接的方式有两种,一种是自动识别链接和HTML解析链接
 1)自动识别链接
     <!-- android:autoLink="web"-设置自动识别链接,值web为匹配Web网址 -->
     <!--android:autoLink="phone"-设置自动识别链接,值phone为匹配电话号码 -->
     <!-- android:autoLink="email"-设置自动识别链接,值email为匹配Email地址 -->
     <!-- android:autoLink="all"-设置自动识别链接,值all为匹配所有 -->

http://blog.csdn.net/flysongpeng/article/details/7527152

15、TextUtils.isEmpty(CharSequence str)这个方法是系统为我们提供的一个非常方便的判断一个CharSequence类型的参数是否为空的方法,这个方法的返回值是一个boolean,当括号内参数为(null)或者("")时,返回true。
TextUtils.equals(CharSequence str1, CharSequence str2)这个是比较括号内两个CharSequence类型的参数是否相等。
16、Error:Execution failed for task ':app:transformClassesWithDexForDebug'. > com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'D:\jdkjre\jdk1.8\bin\java.exe'' finished with non-zero exit value 2
出现这种错误是因为导入的jar包有重复,找到重复的包删除
17在AndroidManifest.xml文件中加入android:screenOrientation属性限制,限制横竖屏切换。
android:screenOrientation="landscape"是限制此页面横屏显示,android:screenOrientation="portrait"是限制此页面数竖屏显示。  
http://blog.csdn.net/nmgchfzhzhg/article/details/8077133
18android中重启adb
http://jingyan.baidu.com/article/c275f6bac24c2ce33d7567be.html
19Activity的onPause()和onResume()

activity本身的生命周期,可见但失去焦点。在tabhost的页面切换时调用可以达到注销activity资源的目的。


20、艺术字生成在线,可用于美化界面  http://www.qt86.com/

21、刚进入activity的时候,如果布局组件有edittext的话,往往edittext会获取焦点,自动弹出软键盘,影响整个界面的视觉效果。解决方法如下: 
可以在edittext的父布局结构中(例如LinearLayout,RelativeLayout等)添加  
android:focusable="true" 
android:focusableInTouchMode="true"
这个两个属性,就可以了。

22一般情况下Intent是供两个Activity之间跳转和传参的,而Fragment和Activity之间的通信则要借助下面链接中的方法。

http://blog.csdn.net/yayun0516/article/details/48210953

注意:ViewPager中的Activity与其他的Activity通信,可以借助广播实现。参见

http://blog.csdn.net/jason0539/article/details/18075293

23、常用网址:

SooPAT专利http://www2.soopat.com/#userconsent#

牛客网http://www.nowcoder.com/1582242

慕课网http://www.imooc.com/course/list?c=android

开源代码http://www.jcodecraeer.com/plus/list.php?tid=31

外文数据库http://lib.njupt.edu.cn/s/36/t/472/p/1/c/3325/d/3456/list.htm

快搜http://so.chongbuluo.com/

24android:ems=“10”

android:ems = "10" 设置TextView或者Edittext的宽度为10个字符的宽度。当设置该属性后,控件显示的长度就为10个字符的长度,超出的部分将不显示。

25GridLayout(网格布局)

getChildCount()  获取GridLayout中的元素个数
GridLayout.spec(0, 5);//相当于android:layout_columnSpan="5" spec(start,size)参数为起始位置,占几列

http://blog.csdn.net/buaaroid/article/details/27064059

26、ViewGroup

http://blog.csdn.net/u014163726/article/details/46852763

27Thisfile is indented with tabs instead of 4 spaces

http://zhidao.baidu.com/link?url=vnAIcQM9dORuwlyBo0r4sUPdKkK_EzlZKgprEoAQAW0YEmQ5leQbYRLEYLOLYlzsbgiqvQHkIXJXDDHKJKyE_qkm6jzQZJ0tvJt3jYfA6gK

CTRL + ALT + L(Win/ Linux), and OPTION + CMD + L (Mac)

http://stackoverflow.com/questions/23632624/android-studio-tab-spacing

28android:inputType="number"--数字格式

android:inputType="numberSigned"--有符号数字格式

android:inputType="numberDecimal"--可以带小数点的浮点格式

29android:inputType常用取值

http://blog.csdn.net/gzh0222/article/details/7248035

http://blog.csdn.net/xqf222/article/details/9789143

30Java中字符流字节流到底有什么区别

stream结尾都是字节流,reader和writer结尾都是字符流。两者的区别就是读写的时候一个是按字节读写,一个是按字符。字符比字节要大,字符流的底层就是字节流。而字符流主要是读取文本文件内容的,可以一个字符一个字符的读取,也可以一行一行的读取文本文件内容。而字节流读取单位为byte.byte作为计算机存储最基本单位,可以用字节流来读取很多其他格式的文件,比如图片视频等等。基于B/S和C/S的文件传输都可以采用字节流的形式。

java中提供了专用于输入输出功能的包Java.io,其中包括:
     InputStream,OutputStream,Reader,Writer。
InputStream 和OutputStream,两个是为字节流设计的,主要用来处理字节或二进制对象,
Reader和 Writer.两个是为字符流(一个字符占两个字节)设计的,主要用来处理字符或字符串.

注:程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件。除了字符和字节流之外,java还有一种叫对象流。可以去查API学习一下。

 不同的字符所占的字节是不同的。ASCII码:
  一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。如一个ASCII码就是一个字节。
  UTF-8编码:
  一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。
  Unicode编码:
  一个英文等于两个字节,一个中文(含繁体)等于两个字节。
  符号:
  英文标点占一个字节,中文标点占两个字节。举例:英文句号“.”占1个字节的大小,中文句号“。”占2个字节的大小。

http://blog.csdn.net/zxman660/article/details/7875799

31、APN网络切换

APN(Access Point Name),即“接入点名称”,用来标识GPRS的业务种类,目前分为两大类:CMWAP(通过GPRS访问WAP业务)、CMNET(除了WAP以外的服务目前都用CMNET,比如连接因特网等)。

 

  APN的英文全称是AccessPoint Name,中文全称叫接入点,是您在通过手机上网时必须配置的一个参数,它决定了您的手机通过哪种接入方式来访问网络。 

http://www.cnblogs.com/hanyonglu/archive/2012/03/29/2423298.html

32、Android漏洞挖掘工具收集与整理

http://blog.csdn.net/phoebe_2012/article/details/44805423

ASEF  https://code.google.com/archive/p/asef/downloads

33、手机服务器微架构设计与实现

http://www.imooc.com/learn/676

34、初识Java微信公众号开发

http://www.cnblogs.com/txw1958/p/weixin-book-dev.html

http://www.imooc.com/learn/368

35、百度的api store收集的可以直接用的开放api,地址:http://apistore.baidu.com/

如:手机号和天气查询等等接口api都可以找到。但这些接口都只是一些简单的查询,像百度地图等功能接口没有提供,需要另外解决。

聚合数据提供的api接口:https://www.juhe.cn/docs

DevStore(全球首家开发者服务商店) http://www.devstore.cn/service/newproductList/cla4-cid0.html

36、外网映射工具

通过映射工具将本机地址映射到公网上,这样才能在公网上访问本地服务。工具有ngrok、花生壳等等。E:\weixin\ngrok

37、API Demos

http://blog.csdn.net/zph2254/article/details/6847978和API Demos 的apk文件

38、Android基础动画

采用属性动画更好。

39、Android studio把一段代码快速提取,放在自己定义方法里面的快捷键

Windows是 Ctrl + Alt + M(如果你之前有把快捷键匹配成了eclipse的那么使用Alt+shift+M)。

Ctrl+斜杠:注释或取消注释当前行或选中的代码块,以双斜杠的方式即“//”
Ctrl+shift+
斜杠:注释或取消注释选中的代码块,以“/*……*/”方式注释。

http://www.cr173.com/html/24051_1.html

40、Android面经

http://www.imooc.com/article/11965

http://www.imooc.com/article/12225

http://www.imooc.com/article/tag/12/hot/5

http://www.nowcoder.com/discuss/5949?type=0&order=4&pos=88&page=7

http://blog.csdn.net/huxiaoyonglan1/article/list/5

41、GitHub 优秀的 Android 开源项目

http://blog.csdn.net/shulianghan/article/details/18046021

42SVM   Android

https://github.com/search?utf8=%E2%9C%93&q=SVM+Android

43NDK

1、慕课网   环境变量没配置成功,后来在http://www.android100.org/html/201509/18/182761.html

的AS中下载NDK到Android SDK目录下,修改path,环境变量配好了。接着看慕课网。

2、看了这些网址也没成功

https://www.shaneenishry.com/blog/2014/08/17/ndk-with-android-studio/

http://www.cnblogs.com/devinzhang/archive/2012/02/29/2373729.html

3、https://segmentfault.com/a/1190000003999352

http://www.tuicool.com/articles/NBjQny

44、ListView是一个经常要用到的android控件,现总结遇到过的一些美化的小细节。

1listview在拖动的时候背景图片消失变成黑色背景,等到拖动完毕我们自己的背景图片才显示出来

解决:在XML中加入android:scrollingCache=”false”  android:cacheColorHint=”#00000000″

2listview的上边和下边有黑色的阴影

解决: android:fadingEdge=”none”

3、修改listviewItem默认选择时的黄色背景

解决:在Java文件中使用listview.setSelector()方法,或使用如下代码

android:listSelector="#00000000"//这样写是透明的,也可加入Drawable图片

4lsitview的每一项之间需要设置一个图片做为间隔

解决: android:divider=”@drawable/list_driver”

45、android:numColumns是Android中GridView控件设置显示列数的属性,他的参数可以是整形数据,例如设置android:numColumns="3"表示这个GridView显示的样式为3列表。设置成auto_fit表示自动调整显示列数。

46、Android中的常见颜色

http://www.cnblogs.com/bluestorm/p/3644669.html

47、getReadableDatabase()并不是以只读方式打开数据库,而是先执行getWritableDatabase(),失败的情况下才以只读方式打开数据库.。

getWritableDatabase()方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,

getWritableDatabase()打开数据库就会出错。getReadableDatabase()方法先以读写方式打开数据库,
倘若使用如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库.

48、关于java UTF-8中文与Unicode编码之间转换,以及将浏览器地址栏编码过的中文转换UTF-8形式

http://blog.csdn.net/lyankj/article/details/51801774

49、Android百度地图开发

http://blog.csdn.net/crazy1235/article/details/42614603

http://www.th7.cn/Program/Android/201507/509472.shtml

50、shape + Selector
shape用于设定形状,可以在selector,layout等里面使用,有6个子标签。

http://www.cnblogs.com/cyanfei/archive/2012/07/27/2612023.html

http://liangruijun.blog.51cto.com/3061169/732310/

注意在selector中default默认显示的那个drawable要放在最下面,不然不会出现变化效果。
http://www.tuicool.com/articles/VVBJjq2

51、Java把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:引用、引用、引用和引用。

具有软引用的对象只有当内存不够的时候才被回收,在内存足够的时候,通常不被回收。

只具有弱引用的对象拥有更短暂的生命周期,可能随时被回收。

如果只是想避免OutOfMemory异常的发生,则可以使用软引用。如果对于应用的性能更在意,想尽快回收一些占用内存比较大的对象,则可以使用弱引用。

SoftReference类、WeakReference类和PhantomReference类,分别代表软引用、弱引用和虚引用。

http://blog.csdn.net/arui319/article/details/8489451

52、Android开发优化之——对Bitmap的内存优化

1、因为Bitmap是吃内存大户,通常在实例化Bitmap的代码中,一定要对OutOfMemory异常进行捕获。

2、生成Bitmap对象最终都是通过JNI调用方式实现的。所以,加载Bitmap到内存里以后,是包含两部分内存区域的。简单的说,一部分是Java部分的,一部分是C部分的。这个Bitmap对象是由Java部分分配的,不用的时候系统就会自动回收了,但是那个对应的C可用的内存区域,虚拟机是不能直接回收的,这个只能调用底层的功能释放。所以需要调用recycle()方法来释放C部分的内存。

// 先判断是否已经回收

if(bitmap!= null && !bitmap.isRecycled()){ 

       // 回收并且置为null

       bitmap.recycle(); 

       bitmap = null; 

System.gc();

 

需要注意的是,调用System.gc()并不能保证立即开始进行回收过程,而只是为了加快回收的到来。

3、使用BitmapFactory.Options设置inSampleSize就可以缩小图片。属性值inSampleSize表示缩略图大小为原始图片大小的几分之一。即如果这个值为2,则取出的缩略图的宽和高都是原始图片的1/2,图片的大小就为原始大小的1/4。

http://blog.csdn.net/arui319/article/details/7953690

53、Binder 机制

Binder是Android中的一个类,它继承了IBinder接口。Binder是Android系统进程间通信(IPC)方式之一,是Android中的一种跨进程通信方式。Binder通信实际上是位于不同进程中的线程之间的通信。Binder框架定义了四个角色:Server,Client,ServiceManager以及Binder驱动。其中Server,Client,SMgr运行于用户空间,驱动运行于内核空间。

对Binder而言,Binder可以看成Server提供的实现某个特定服务的访问接入点, Client通过这个‘地址’向Server发送请求来使用该服务;对Client而言,Binder可以看成是通向Server的管道入口,要想和某个Server通信首先必须建立这个管道并获得管道入口。

Binder使用Client-Server通信方式,安全性好,简单高效,再加上其面向对象的设计思想,独特的接收缓存管理和线程池管理方式,成为Android进程间通信的中流砥柱。

https://my.oschina.net/Bruce370/blog/536946

http://blog.csdn.net/boyupeng/article/details/47011383

54、时间

System.currentTimeMillis()产生一个当前的毫秒,这个毫秒其实就是自1970年1月1日0时起的毫秒数,Date()其实就是相当于Date(System.currentTimeMillis());因为Date类还有构造Date(long date),用来计算long秒与1970年1月1日之间的毫秒差。

new Date.getTime()所返回的是一个long型的毫秒数 ,如果要获取特定格式的时间需要格式化。如下所示:

SimpleDateFormat sdf = newSimpleDateFormat("yyyy-MM-dd"); 
sdf.format(new Date()); 
得到的日期格式为:2008-05-14 

http://lixh1986.iteye.com/blog/1757619

55、如果是抽象类要实现接口,可以实现部分或者一个都不实现,要是具体类就必须实现接口中的所有方法。
56、android.support.v4.widget.SwipeRefreshLayout

下拉刷新组件

setOnRefreshListener 用于监听刷新的动作。SwipeRefreshLayout 下拉,就会有刷新的效果出来,触发该监听。

http://www.cnblogs.com/JinyaoLi/p/3852424.html
http://blog.csdn.net/it_transformers/article/details/42143015
 
RecyclerView
RecyclerView提供了以下5种角色:
RecyclerView.Adapter
RecyclerView.ViewHolder       Recyclerview缓存的是viewholder
RecyclerView.LayoutManager   布局器,负责Item视图的布局
RecyclerView.ItemDecoration   每个item附加的子视图,可用来绘制Divider,设置padding
RecyclerView.ItemAnimator     负责添加、删除数据时的动画效果
通过Recycler.AdaptergetItemCount()方法可以轻松获取到RecyclerView列表中Item View的个数。

CardView被包装为一种布局,并且经常在ListView和RecyclerView的Item布局中,作为一种容器使用。

LayoutManger给我们提供了几个方法可以让开发者方便地获取到屏幕上面的顶部item和顶部item相关的信息:
findFirstVisibleItemPosition()        findFirstCompletlyVisibleItemPosition()
findLastVisibleItemPosition()         findLastCompletlyVisibleItemPosition()

http://blog.csdn.net/javacainiao931121/article/details/51720807

http://www.cnblogs.com/krislight1105/p/5251893.html
57、Android:scaleType是控制图片如何resized/moved来匹对ImageViewsize
http://blog.csdn.net/encienqi/article/details/7913262
58、SnackBar

新增的一个控件,是Toast的威力加强版。使用Snackbar我们可以在屏幕底部(大多时候)快速弹出消息。它是显示在所有屏幕其它元素之上(屏幕最顶层),并不是像Toast一样覆盖在屏幕上。同一时间只能显示一个snackbar。

http://www.tuicool.com/articles/BfEbMvB

59、OkHttpUtils框架
1、OkHttp网络连接封装工具类
OkHttpUtils.ResultCallback<String> loadNewsCallback = new OkHttpUtils.ResultCallback<String>() {
@Override
onSuccess(String response) {}
@Override
onFailure(Exception e) {}
}
OkHttpUtils.get(url, loadNewsCallback);//get方式获取响应回调
http://blog.csdn.net/lmj623565791/article/details/49734867
2、将获取到的json转换为图片列表对象,其中图片对象类ImageBean.class 要implements Serializable
public static List<ImageBean> readJsonImageBeans(String res) {
    List<ImageBean> beans = new ArrayList<ImageBean>();
    try {
        JsonParser parser = new JsonParser();
        JsonArray jsonArray = parser.parse(res).getAsJsonArray();
        for (int i = 1; i < jsonArray.size(); i++) {
            JsonObject jo = jsonArray.get(i).getAsJsonObject();
            ImageBean news = JsonUtils.deserialize(jo, ImageBean.class);
            beans.add(news);
        }
    } catch (Exception e) {
        LogUtils.e(TAG, "readJsonImageBeans error", e);
    }
    return beans;
}
60、数据绑定框架DataBinding
http://www.jianshu.com/p/68d02ca4d30d
http://blog.csdn.net/jmq_0000/article/details/46658765
61、Observable     Observer
Observable是观察者模式的典型应用。在Android下,Observable是一个泛型的抽象类,表示一个观察者对象,提供了观察者注册、反注册及清空三个方法。
实现android.databinding.Observable接口的类可以允许附加一个监听器到Bound对象以便监听对象上的所有属性的变化。
被观察者类,需要继承Observable类。观察者类需要实现Observer接口中的update()方法。
http://www.cnblogs.com/xudong-bupt/p/3428108.html
62、内存缓存技术
缓存lrucache:
LruCache是android提供的一个缓存工具类,它有一个特点,当缓存的图片达到了预先设定的值的时候,那么近期使用次数最少的图片就会被回收掉。
比如:private LruCache<String, Bitmap> mImageCache;
LruCache里面的键值对分别是URL和对应的图片。
http://blog.chinaunix.net/uid-26930580-id-4138306.html
http://blog.csdn.net/xiaanming/article/details/9825113
http://blog.csdn.net/guolin_blog/article/details/9526203#comments
http://blog.csdn.net/fangzhibin4712/article/details/38823533
http://www.cnblogs.com/tianzhijiexian/p/4248677.html
DiskLruCache:
LruCache只是管理了内存中图片的存储与释放,如果图片从内存中被移除的话,那么又需要从网络上重新加载一次图片,这显然非常耗时。对此,Google又提供了一套硬盘缓存的解决方案:DiskLruCache
比如网易新闻、Twitter等就是使用DiskLruCache来进行硬盘缓存的。
其实DiskLruCache并没有限制数据的缓存位置,可以自由地进行设定,但是通常情况下多数应用程序都会将缓存的位置选择为 /sdcard/Android/data/<application package>/cache 这个路径。选择在这个位置有两点好处:第一,这是存储在SD卡上的,因此即使缓存再多的数据也不会对手机的内置存储空间有任何影响,只要SD卡空间足够就行。第二,这个路径被Android系统认定为应用程序的缓存路径,当程序被卸载的时候,这里的数据也会一起被清除掉,这样就不会出现删除程序之后手机上还有很多残留数据的问题。
http://blog.csdn.net/guolin_blog/article/details/28863651
http://blog.csdn.net/fangzhibin4712/article/details/38823533
63、瀑布流布局
它是有很科学的排列规则的。整个界面会根据屏幕的宽度划分成等宽的若干列,由于手机的屏幕不是很大,这里我们就分成三列。每当需要添加一张图片时,会将这张图片的宽度压缩成和列一样宽,再按照同样的压缩比例对图片的高度进行压缩,然后在这三列中找出当前高度最小的一列,将图片添加到这一列中。之后每当需要添加一张新图片时,都去重复上面的操作,就会形成瀑布流格局的照片墙。
http://blog.csdn.net/guolin_blog/article/details/10470797
64、OpenGL
OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言、跨平台编程接口的规格,它用于三维图象(二维的亦可)。OpenGL是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库。
OpenGL- ES 是免授权费的,跨平台的,功能完善的2D3D图形应用程序接口API,主要针对多种嵌入式系统专门设计 - 包括控制台、移动电话、手持设备、家电设备和汽车。它由精心定义的桌面OpenGL子集组成,创造了软件与图形加速间灵活强大的底层交互接口。 
为了显示OpenGL的图形,你需要使用GLSurfaceView类,就像其他任何的View子类意义,你可以将它添加到你的Activity或Fragment之上,通过在布局xml文件中定义或者在代码中创建实例。

游戏引擎

https://zhidao.baidu.com/question/1370796455148390179.html
 
65、ShareSdK
http://blog.csdn.net/cwcwj3069/article/details/41698417

66、obj文件(3D模型文件格式),用记事本就可以打开。

http://baike.baidu.com/link?url=JzrQ21It2gbOCn24_a3APzFoTk0-bGVTZQpLGUGzYJ3HetfahNnLfD-dPePlM0oyEyCwJnBgqwEfJHNJDiUi_OQRH0NLXZDbfkN5tcIoUZ3

.sh是UNIX/LINUX 操作系统的脚本文件,用记事本就可以打开。

67、http://www.mob.com/  手机录像分享、免费短信验证码SDK、ShareSDK分享

68、csdn博客

http://blog.csdn.net/bboyfeiyu
 
69、绘制动态多边形
http://blog.csdn.net/as7210636/article/details/52692102
http://blog.csdn.net/as7210636/article/details/52634769

在Android中需要通过graphics类来显示2D图形。

graphics中包括了Canvas(画布)、Paint(画笔)、Color(颜色)、Bitmap(图像)等常用的类。graphics具有绘制点、线、颜色、2D几何图形、图像处理等功能。

http://www.cnblogs.com/menlsh/archive/2012/11/18/2776003.html
Canvas类可以用来实现各种图形的绘制工作,如绘制直线、矩形、圆等等。
canvas.translate()canvas.rotate()

http://blog.csdn.net/zhuhai__yizhi/article/details/50203151

Rect类主要用于表示坐标系中的一块矩形区域,并可以对其做一些简单操作。这块矩形区域,需要用左上右下两个坐标点表示(left,top,right,bottom,你也可以获取一个Rect实例的WidthHeight

Rect rect=new Rect(100,50,300,500);

就是左上角的坐标是(100,50),右下角的坐标是(300,500)。

70、SeekBar

SeekBar是进度条。我们使用进度条时,可以使用系统默认的进度条;也可以自定义进度条的图片和滑块图片等。

http://www.cnblogs.com/skywang12345/archive/2013/06/15/3123562.html

71、Android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用。 
Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用。

invalidate()是用来刷新View的,必须是在UI线程中进行工作。比如在修改某个view的显示时,调用invalidate()才能看到重新绘制的界面。invalidate()的调用是把之前的旧的view从主UI线程队列中pop掉。 

72、自定义View的实现方式大概可以分为三种,自绘控件、组合控件、以及继承控件。

自绘控件的意思是,这个控件上的内容是用onDraw函数绘制出来的。

在自定义view的时候,需要知道3步骤:

1.测量——onMeasure():决定View的大小

2.布局——onLayout():决定ViewViewGroup中的位置

3.绘制——onDraw():如何绘制这个View

73、Uri的使用场景:

1,调web浏览器  
Uri myBlogUri = Uri.parse(" http://xxxxx.com ");  
returnIt = new Intent(Intent.ACTION_VIEW, myBlogUri);  
2,地图  
Uri mapUri =Uri.parse("geo:38.899533,-77.036476");  
returnIt = new Intent(Intent.ACTION_VIEW, mapUri);  
3,调拨打电话界面  
Uri telUri = Uri.parse("tel:100861");  
returnIt = new Intent(Intent.ACTION_DIAL, telUri);  
4,直接拨打电话  
Uri callUri = Uri.parse("tel:100861");  
returnIt = new Intent(Intent.ACTION_CALL, callUri);  
5,卸载  
Uri uninstallUri = Uri.fromParts("package","xxx", null);  
returnIt = new Intent(Intent.ACTION_DELETE, uninstallUri);  
6,安装  
Uri installUri = Uri.fromParts("package","xxx", null);  
returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED,installUri);  
7,播放  
Uri playUri =Uri.parse("file:///sdcard/download/everything.mp3");  
returnIt = new Intent(Intent.ACTION_VIEW, playUri);  
8,调用发邮件  
Uri emailUri =Uri.parse("mailto:[email protected]");  
returnIt = new Intent(Intent.ACTION_SENDTO, emailUri);  
9,发邮件  
returnIt = new Intent(Intent.ACTION_SEND);  
String[] tos = { "[email protected]" };  
String[] ccs = { "[email protected]" };  
returnIt.putExtra(Intent.EXTRA_EMAIL, tos);  
returnIt.putExtra(Intent.EXTRA_CC, ccs);  
returnIt.putExtra(Intent.EXTRA_TEXT, "body");  
returnIt.putExtra(Intent.EXTRA_SUBJECT,"subject");  
returnIt.setType("message/rfc882");  
Intent.createChooser(returnIt, "Choose EmailClient");  
10,发短信  
Uri smsUri = Uri.parse("tel:100861");  
returnIt = new Intent(Intent.ACTION_VIEW, smsUri);  
returnIt.putExtra("sms_body", "yyyy");  
returnIt.setType("vnd.android-dir/mms-sms");  
11,直接发邮件  
Uri smsToUri = Uri.parse("smsto://100861");  
returnIt = new Intent(Intent.ACTION_SENDTO, smsToUri);  
returnIt.putExtra("sms_body", "yyyy");  
12,发彩信  
Uri mmsUri = Uri.parse("content://media/external/images/media/23");  
returnIt = new Intent(Intent.ACTION_SEND);  
returnIt.putExtra("sms_body", "yyyy");  
returnIt.putExtra(Intent.EXTRA_STREAM, mmsUri);  
returnIt.setType("image/png");

74AIDL:AndroidInterface Definition Language,即Android接口定义语言。

Android使用AIDL提供公开服务接口,使得不同进程间可以相互通信。

建立AIDL服务要比建立普通的服务复杂一些,具体步骤如下:

(1)在Eclipse Android工程的Java包目录中建立一个扩展名为aidl的文件。该文件的语法类似于Java代码,但会稍有不同。

(2)如果aidl文件的内容是正确的,ADT会自动生成一个Java接口文件(*.java)。

(3)建立一个服务类(Service的子类)。

(4)实现由aidl文件生成的Java接口。

(5)在AndroidManifest.xml文件中配置AIDL服务,尤其要注意的是,<action>标签中android:name的属性值就是客户端要引用该服务的ID,也就是Intent类的参数值。

aidl对应的接口名称必须与aidl文件名相同不然无法自动编译

aidl对应的接口的方法不能加访问权限修饰符

75、OOM(OutOf Memory)内存溢出。回收不及时引起。 

ORM(Object/RelationshipMapping)对象/关系映射。面向对象操作与关系型数据库交互时的映射。其中Hibernate就是一种可行的ORM框架技术。

其他主流的ORM框架技术有:MyBatis、EJB

76、Hibernate

Hibernate对JDBC进行了非常轻量级的对象封装。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(android)