Android个人学习小结2016.4

来源:互联网 发布:淘宝天猫抢红包怎么抢 编辑:程序博客网 时间:2024/04/28 03:46

以下内容仅为个人初学Android小结及生活,不太适合其他人看。

1、 无论在哪里,在做什么,只要坚持学习、探索、创造价值,其他的东西自然都会来的。

2、微信-我的-钱包-城市服务-社保查询,可以查个人社保情况!!

3、android:layout_alignParentRight=”true” 居右显示

4、android:padding和android:margin的区别
通俗的理解:
Padding 为内边框,指该控件内部内容,如文本/图片距离该控件的边距
Margin 为外边框,指该控件距离边父控件的边距
对应的属性为

android:layout_marginBottom=”1dp” android:layout_marginLeft=”1dp”
android:layout_marginTop=”1dip” android:layout_marginRight=”1dp”
android:paddingLeft=”1dp” android:paddingTop=”1dp”
android:paddingRight=”1dp” android:paddingBottom=”1dp”

5、APK签名用处主要有两种
a. 使用特殊的key签名可以获取到一些不同的权限。
b. APK如果使用一个key签名,发布时另一个key签名的文件将无法安装或覆盖老的版本,这样可以防止你已安装的应用被恶意的第三方覆盖或替换掉

6、android布局的两种方式,一是在xml文件中直接放布局资源image text等;而是在java文件中部署资源,如:

TextView textView1 = (TextView)linearLayout2.findViewById(R.id.ItemTextLeft);ImageView imageView1 =(ImageView)linearLayout2.findViewById(R.id.ItemImageLeft);
 imageView1.setImageResource(R.drawable.item1); textView1.setText("第二列");

7、android使用SharedPreferences存储和读取数据
android持久化数据的一种方式是使用SharedPreferences来进行:

  • 保存数据

    SharedPreferences.Editor mEditor = mPerferences.edit();
    mEditor.putInt(“test1”, totalMoney);
    mEditor.commit();

  • 读取数据

    SharedPreferences mPerferences = PreferenceManager.getDefaultSharedPreferences(activity.this);
    int test2= mPerferences.getInt(“test1”, null);

8、Scanner构造器从文件中读取数据

9、@SuppressWarnings(“unused”)
屏蔽java编译中的一些警告信息。unused这个参数是屏蔽:定义的变量在代码中并未使用且无法访问。java在编译的时候会出现这样的警告,加上这个注解之后就是告诉编译器,忽略这些警告,编译的过程中将不会出现这种类型的警告

10、自定义适配器

11、html+javascript+css

12、Read The Fucking Source Code

13、顶栏标题Spinner 列表选项框
DrawerLayout 官方侧滑控件
Json解析类

14、1 java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性。
  2 java中的length()方法是针对字符串String说的,如果想看这个字符串的长度则用到length()这个方法。
  3.java中的size()方法是针对泛型集合说的,如果想看这个泛型有多少个元素,就调用此方法来查看!
  这个例子来演示这两个方法和一个属性的用法
  public static void main(String[] args) {
  String []list={“ma”,“cao”,“yuan”};
  String a=“macaoyuan”;
  System.out.println(list.length);
  System.out.println(a.length());
  List array=new ArrayList();
  array.add(a);
  System.out.println(array.size());
  }
  输出的值为:
  3
  9
  1

15、Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发 TCP/IP网络上的应用程序。
socket非常类似于电话插座。以一个国家级电话网为例。电话的通话双方相当于相互通信的2个进程,区号是它的网络地址;区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于socket号。任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方区号,相当于给出网络地址)。对方假如在场并空闲(相当于通信的另一主机开机且可以接受连接请求),拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一方挂起电话机相当于关闭socket,撤消连接。
Socket 接口是访问 Internet 使用得最广泛的方法。 如果你有一台刚配好TCP/IP协议的主机,其IP地址是202.120.127.201, 此时在另一台主机或同一台主机上执行ftp 202.120.127.201,显然无法建立连接。因”202.120.127.201” 这台主机没有运行FTP服务软件。同样, 在另一台或同一台主机上运行浏览软件 如Netscape,输入”http://202.120.127.201“,也无法建立连接。现在,如果在这台主机上运行一个FTP服务软件(该软件将打开一个Socket, 并将其绑定到21端口),再在这台主机上运行一个Web 服务软件(该软件将打开另一个Socket,并将其绑定到80端口)。这样,在另一台主机或同一台主机上执行ftp 202.120.127.201,FTP客户软件将通过21端口来呼叫主机上由FTP 服务软件提供的Socket,与其建立连接并对话。而在netscape中输入”http://202.120.127.201“时,将通过80端口来呼叫主机上由Web服务软件提供的Socket,与其建 立连接并对话。

16、什么是OOM?为什么会引起OOM?

答:Out Of Memory(内存溢出),我们都知道Android系统会为每个APP分配一个独立的工作空间, 或者说分配一个单独的Dalvik虚拟机,这样每个APP都可以独立运行而不相互影响!而Android对于每个 Dalvik虚拟机都会有一个最大内存限制,如果当前占用的内存加上我们申请的内存资源超过了这个限制 ,系统就会抛出OOM错误!另外,这里别和RAM混淆了,即时当前RAM中剩余的内存有1G多,但是OOM还是会发生!别把RAM(物理内存)和OOM扯到一起!另外RAM不足的话,就是杀应用了,而不是仅仅是OOM了! 而这个Dalvik中的最大内存标准,不同的机型是不一样的

17、Android画图最基本的三个对象(Color,Paint,Canvas)
三个类都存放在 android.graphics包下
1) Color :颜色对象,相当于现实生活中的 ‘调料’
2) Paint : 画笔对象,相当于现实生活中画图用的 ‘笔’————主要的还是对‘画笔’进行设置
3) Canvas : 画布对象,相当于现实生活中画图用的 ‘纸 或 布’

18、ART模式英文全称为:Android runtime,谷歌Android 4.4系统新增的一种应用运行模式,与传统的Dalvik模式不同,ART模式可以实现更为流畅的安卓系统体验,对于大家来说,只要明白ART模式可让系统体验更加流畅,不过只有在安卓4.4以上系统中采用此功能

19、Android单元测试
在AndroidManifest中
在application 内部添加

<uses-library android:name="android.test.runner" />

application标签同级的位置添加

<instrumentation        android:name="android.test.InstrumentationTestRunner"        android:label="test"        android:targetPackage="com.example.testaudio" />

然后在java文件中写测试函数

20、可用teamviewer来远程连接mac与win,或者登录俩QQ远程

21、「第一行代码」 「Thinking In Java」 「Effective Java」

22、String args[ ]或者String[ ] args表示给主方法传一个字符串数组. 而args是一个字符串数组的变量名,不是关键字,是arguments的缩写,只是一个默认名,一般都习惯性照写

23、java原始数据类型:byte, short,int,long,char,float,boolean,double,引用数据类型

24、java常量 前缀 0 是为了标明八进制,前缀 0x 是为了标明十六进制
int decimal = 100;
int octal = 0144;

25、println 相比print 输入多一行空白

26、java中extends和implements的区别,怎么用?

一个是继承,一个是实现接口,继承这个可以理解为继承父类的方法,父类中的方法可以在子类中用到,super(),实现接口就是在接口中定义了方法,这个方法要你自己去实现,接口可以看作一个标准,比如定义了一个动物的接口,它里面有吃(eat())这个方法,你就可以实现这个方法implements,这个方法是自己写,可以是吃苹果,吃梨子,香蕉,或者其他的。IMPLEMENTS就是具体实现这个接口。
extends后面跟的是类,表示继承关系;
如public class Dog extends Animal
implements后面跟的是接口,表示实现接口(可以是多个);
如public class Dog implements Runner
extends是继承类,implements是实现接口。
类只能继承一个,接口可以实现多个。
extends继承父类的时候可以重写父类的方法,也可以调用父类的非私有方法;implements实现接口,必须实现接口的所有方法。?

extends 代表继承某一个父类,Java不支持多重继承
而implements 代表实现某些接口,Java通过接口实现多重继承

27、单元测试&功能测试&接口测试,关于单元测试,衡量的最常用的标准就是持续集成和代码覆盖率。
代码review 降低代码复杂度 耦合性 减少重复无用的代码。

测试流程:需求评审,用例设计,子功能增量,子功能增量回归,子功能预发布,子功能灰度,合流前验证,合流后验证,合流后集成,合流后集成回归,合流后灰度,正式发布。

28、visio画流程图,XMind画思维导图,project做项目进度管理

29、类是描述一个对象的成员属性和行为。接口只包含一个类所实现的行为。

  • 对象 - 对象有状态和行为。例子:一条狗有状态:颜色,名字,品种以及行为-摇尾巴,吠,吃。一个对象是一个类的实例。
  • 类 - 一个类能被定义成对象的模版/蓝图,用于描述对象类型的行为/状态。
  • 方法 - 一个方法基本是一个行为。一个类能包含许多方法。逻辑是写在方法中的,数据被操作并且所有的行为被执行。

30、熟悉java连接数据库,增删改更新数据等操作。sqlite是安卓自带数据库,可用来缓存一些文章图片,比较大量的信息

31、google对Eclipse的adt不再更新支持,故API23以上的版本无法layout预览,尽快切换到android studio阵营吧

32、HierarchyViewer使用 用于适配安卓多布局

33、最终用户许可协议(英语:end-user license agreements,英文缩写:EULA)是指软件开发者或发行者授权用户使用特定软件产品时的规定,大多私有软件附带此协议,如不接受则无法安装。不过自由软件则较少使用这个协议,如GPL是一种授权协议,但不限于最终用户。一个例外是Firefox拥有注册商标,Mozilla基金会使用最终用户许可协议保护其商标。

34、android new一个类后,不用时要手动释放,不然会导致内存泄漏。 handler thread中的数据是临时存放在内存的,需要自己new一个

35、SharedPreferences是以XML的格式以文件的方式自动保存的,
到/data/data/<package name>/shared_prefs下
查看SharedPreferences xml文件,用re explore 打开 打开方式-类型-以文本方式打开-html查看器打开
(注意,要先按住文件,勾选全部权限,才能够打开查看,否则会报错) 其实勾选权限后,部分文本查看器都能打开了,如es explore

36、看过一个很经典的答案,说为什么Nokia衰落的——人有时不是死在绝境路上,而是死在了十字路口上。

37、获取屏幕长宽 旧版API13以下:
int screen_width = getWindowManager().getDefaultDisplay().getWidth();
int screen_height = getWindowManager().getDefaultDisplay().getHeight();
新版
Display display = getWindowManager().getDefaultDisplay();
Point size =newPoint();
display.getSize(size);
int screen_width = size.x;
int screen_height = size.y;

38、C语言代码中,#define TRUE FALSE有没有实际意义?若有,什么意思?

系统默认定义TRUE 是1 FALSE 是0,如果你定义TRUE 为FALSE 那么 ,实际意义上让查你代码、改BUG的人很难找到问题

39、base64编码

40、保存数据的的方法有:
* 1、网络存储
* 2、数据库sqlite存储
* 3、SharedPreferences本地化存储
* 4、File文件存储
* 四种存储数据的方法,对应的Demo:
* NetworkDemo、SQLiteDemo、SharedPreferencesDemo和FileDemo

41、Bundle是一个特殊的map
它的键类型固定为String
值的类型也只有几个

发送数据:
Bundle bundle = new Bundle();
bundle.putString(“sex” , “男人”);
bundle.putDouble(“height” , 40,38);

Intent intent = new Intent();
intent.putExtras(bundle);
intent.setClass(ThisOne.this , ThatOne.class);
startActivity(intent);

接收数据:
Bundle bundle = this.getIntent().getExtras();
String sex = bundle.getString(“sex”);
double height = bundle.getDouble(“height”);

42、onCreate
和 onResume 在程序启动时候都会启动,
所有有些需要在onCreate
onResume中都要实现的功能,之需要放在onResume中就可以了。
这样还可以避免部分错误,比如在两个事件中都弹出了提示框,这么就会提示两次。

43、if(text ==null || text.length()==0)

44、不要把自己变成“储钱罐”,因为没有人能够靠储钱变富;但一定要把自己变成“印钞机”,需要钱的时候可以随时靠能力去取

45、查看apk签名的办法,解压apk,在解压目录下cmd控制台输入
keytool-printcert-file META-INF/CERT.RSA
eclipse调试时,会有一个测试签名,若导出正式apk包时使用不同签名,则无法覆盖安装,会提示卸载测试版本;若想用户无缝更新apk,需要发布时使用同一个签名才行

平时我们的程序可以在模拟器上安装并运行,是因为在应用程序开发期间,由于是以 Debug 面试进行编译的,因此ADT 根据会自动用默认的密钥和证书来进行签名,而在以发布模式编译时,apk 文件就不会得到自动签名,这样就需要进行手工签名。 给apk 签名可以带来以下好处: 1.、应用程序升级:如果你希望用户无缝升级到新的版本,那么你必须用同一个证书进行签名。这是由于只有以同一个证书签名,系统才会允许安装升级的应用程序。 如果你采用了不同的证书,那么系统会要求你的应用程序采用不同的包名称,在这种情况下相当于安装了一个全新的应用程序。如果想升级应用程序,签名证书要相同,包名称要相同! 2.、应用程序模块化:Android 系统可以允许同一个证书签名的多个应用程序在一个进程里运行,系统实际把他们作为一个单个的应用程序,此时就可以把我们的应用程序以模块的方式进行部署,而用户可以独立的升级其中的一个模块 3.、代码或者数据共享:Android 提供了基于签名的权限机制,那么一个应用程序就可以为另一个以相同证书签名的应用程序公开自己的功能。以同一个证书对多个应用程序进行签名,利用基于签名的权限检查,你就可以在应用程序间以安全的方式共享代码和数据了。 4.不同的应用程序之间,想共享数据,或者共享代码,那么要让他们运行在同一个进程中,而且要让他们用相同的证书签名。

46、谨慎选择包名
包名 (Package Name) 就相当于一款应用在户口本上登记的名字,是系统用来区分不同应用的字段。重复的包名会被认为是同一款应用,不能同时安装在一个系统里。一般来说,包名建议使用域名反序。比如豌豆荚的网站域名是www.wandoujia.com,那么豌豆荚的一系列 Android 应用的包名就是 com.wandoujia.*。这种约定俗成的办法可以最大程度地避免“撞名”的事故。

47、

public class mainActivity extends Activity implements OnClickListener{      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.main);          findViewById(R.id.Button02).setOnClickListener(this);          findViewById(R.id.Button03).setOnClickListener(this);      }      public void onClick(View view) {          switch (v.getId()) {              case R.id.Button03:                  Intent intent = new Intent(mainActivity.this, fristActivity.class);                  intent.putExtra("data", "mainActivity");                  startActivity(intent);                    break;                        case R.id.Button02:                  Intent intent = new Intent(mainActivity.this, loginActivity.class);                  intent.putExtra("data", "mainActivity");                  startActivity(intent);                    break;                default:                  break;          }      }      ……  }  

48、activity没有主次之分,只有一个activity跳到另一个activity,想结束掉之前的activity,1,可以在跳转的时候把他finish掉,2,在另一个activity中拿到它的引用调用finish,3,可以写个父类的baseactivity,写个application在里面建一个list,然后在baseactivity里面oncreate方法里面把打开的activity都add进去,然后想要结束哪个activity就遍历list里面的activity,找到你要结束的activity,finish掉就可以了!

49、try{}
catch(Exception e){
e.printStackTrace();}
当try语句中出现异常时,会执行catch中的语句,java运行时系统会自动将catch括号中的Exception e 初始化,也就是实例化Exception类型的对象。e是此对象引用名称。然后e(引用)会自动调用Exception类中指定的方法,也就出现了e.printStackTrace() ;。
printStackTrace()方法的意思是:在命令行打印异常信息在程序中出错的位置及原因。(这是白话解释,比较容易理解)

50、实现按钮等控件的不可见
XML:android:visibility=”invisible” //invisible会保留控件位置,gone则位置也没了
Java代码:view.setVisibility(View.INVISIBLE); //GONE

51、s.length() 获得字符串长度
if (password.equalsIgnoreCase(“”)) {
showDlgWithPosbtn(“密码不能为空!\n”, null);
return false;
}
if (password.length()<6) {
showDlgWithPosbtn(“密码不能少于6位!\n”, null);
return false;
}
String str = (String) (textView).getText();

52、string文件中,\n表示下一行,\u3000缩进字符

53、长文段手动下滑滚动显示,在布局文件中用ScrollView

54、读取手机图片:
Bitmap bmp=BitmapFactroy.decodeFile(“/sdcard/xxx.png”);
imageview.setImageBitmap(bmp);
读取网络图片:
URL url=new URL(图片网址);
URLConection conn=url.openConnection();
conn.connect();
InputStream is=conn.getInputStream();
Bitmap bmp=BitmapFactory.decodeSteam(is);
imageview.setImageBitmap(bm);

55、ubuntu卸载软件 sudu apt-get autoremove –purge 软件名 按tab自动补全

56、一般toast显示不出有2个原因:
1、在非UI线程中执行,建议使用handler显示提示
2、没有执行到,这是逻辑错误
3、可能是手机设置-应用通知管理没打开

57、监听返回键menu键等功能

@Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        if ((keyCode == KeyEvent.KEYCODE_BACK)) {            onTouchEvent(null);  //执行你想要的操作            // System.out.println("按下了back键 onKeyDown()");            return false;        } else if ((keyCode == KeyEvent.KEYCODE_MENU)) {            return false;        } else {            return super.onKeyDown(keyCode, event);        }    }

58、 自动适配的原理很简单,只要你建立的项目是1.6或者更高都会看到项目下有drawable-hdpi、drawable-mdpi、drawable-ldpi 三个文件夹,这三个文件夹分别放置高清分辨率、中分辨率、低分辨率的资源文件;那么如果你的项目在高清分辨率上运行的话,系统会默认索引drawable-hdpi文件夹下的资源,其他雷同;

那么既然系统会自动找匹配的文件夹,那么肯定会出现找不到的情况,比如当前你的应用在高清分辨率运行,假设代码中加载一张“himi.png”的图,那么系统首先会去drawable-hdpi文件夹下去找这张图,一旦找不到,系统会再到其他drawable下寻找,再假设你其实把这张“himi.png”放在了drawable-mdpi中,那么系统会默认把这张图片放大;反之一样,如果你在低分辨率中运行加载一张图片的话,一旦你将图片放入高清的drawable-dpi中,那么系统默认缩小这张图;  总结来说:如果你的应用想适配高、中、低分辨率,那么你需要有3套图放入对应的文件夹中,这样系统会智能加载;如果你就想保留一个文件夹,不想让系统智能寻找缩放的话,有两种方式可以解决:   1.删除drawable-hdpi、drawable-mdpi、drawable-ldpi三个文件夹,创建一个drawable文件夹即可;   2.将资源文件放入assets中,因为assets中的资源系统永远不会为其生成id,所以不会智能缩放;

59、在非主线程更新ui,handler new runnable thread等 http请求要放在非主线程执行
Looper,Handler和Message。其实还有一个Message Queue(消息队列
主线程也就是ui线程

在new 子线程中更新ui操作,这些操作若出现toast dialog等,要先用Looper.prepare();结束操作用Loop.loop();
前几次碰到这个问题,确实郁闷了很久… log – java.lang.RuntimeException: Can’t create handler inside thread that has not calledLooper.prepare()

解决办法很简单:
Looper.prepare();
Toast.makeText(getApplicationContext(), “test”, Toast.LENGTH_LONG).show();
Looper.loop();

60、@SuppressLint(“NewApi”) 屏蔽一切新api中才能使用的方法报的android lint错误
@TargetApi() 只屏蔽某一新api中才能使用的方法报的android lint错误
举个例子,某个方法中使用了api9新加入的方法,而项目设置的android:minSdkVersion=8,此时在方法上加@SuppressLint(“NewApi”)和@TargetApi(Build.VERSION_CODES.GINGERBREAD)都可以,以上是通用的情况。
而当你在此方法中又引用了一个api11才加入的方法时,@TargetApi(Build.VERSION_CODES.GINGERBREAD)注解的方法又报错了,而@SuppressLint(“NewApi”)不会报错,这就是区别。

当然,不管你使用了哪个注解,作用仅仅是屏蔽android lint错误,所以在方法中还要判断版本做不同的操作,比如:

[java] view plain copyif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {              //          } else {// Pre GINGERBREAD              //          }  

61、Can’t create handler inside thread that has not called Looper.prepare()”
好像是因为处理数据跟处理UI问题,当时我把UI也放到线程里面处理,就报这个错误,后面,把UI放到Handler里面处理后,就ok了。

62、软考是该这么说,一般大家都叫 上午考试 和 下午考试。
上午考试是75道选择题共75分,下午考试是5道综合题(有时考7道题选做5道题)共75分。
2004年改革就不在出现分数线了,一律定位45分过,即上午45,下午45。
(补充:单过上午或下午考试是没有用,成绩不保留。要上下午都过才算过。)

63、Runtime Exception:
在定义方法时不需要声明会抛出runtime exception; 在调用这个方法时不需要捕获这个runtime exception; runtime exception是从java.lang.RuntimeException或java.lang.Error类衍生出来的。 例如:nullpointexception,IndexOutOfBoundsException就属于runtime exception

Exception:
定义方法时必须声明所有可能会抛出的exception; 在调用这个方法时,必须捕获它的checked exception,不然就得把它的exception传递下去;exception是从java.lang.Exception类衍生出来的。例如:IOException,SQLException就属于Exception

0 0
原创粉丝点击