android开发中的一些总结

1.Intent传值
putExtra设置值,通过getIntent().getIntExtra取值,getIntent().getStringExtra(“str1”),
// 调用该对象的getStringExtra()方法来获得使用putExtra()方法设置的字符串值
getIntent().getIntExtra(“age1”, 0)
//对于整数值,调用getIntExtra()方法(注意,如果该名称没有存储值,则会使用默认值,在此为0)

需要注意的是当传递自定义mode的时候mode需实现序列化方法(推荐自定义modle实现Parcelable),才能用intent的序列化传输。
list需使用intent的arraylist传输,另外还可以传输hashmap

2.空值判断
对于空值的读取要进行判断

if(device!=null && device.size()>0){
    Do something
}

其中判断空一定要在前面,否则会报空指针异常

3、结束app
• finish():结束当前Activity,不会立即释放内存。遵循android内存管理机制。
• exit():结束当前组件如Activity,并立即释放当前Activity所占资源。
• killProcess():结束当前组件如Activity,并立即释放当前Activity所占资源。
以上的方法只是实现了关闭当前activity,而整个应用并没有被关闭;
• restartPackage():结束整个App,包括service等其它Activity组件(这个方法已经过时)。
特别注意:除了finish()方法可以调用Activity的生命周期方法如onStop()、onDestroy(),其余三种退出App均不会调用Activity的生命周期方法。除非,在调用这几个方法之前或者之后主动调用Activity的生命周期方法。如:
System.exit(int);
onDestroy();
所以方案是建立一个单例类管理所有的activity放置在退出时仍有activity未关闭

3、读取目录

import java.io.File;
public class Test1 {
 public static void main(String[] args) {
  String path="d:/";
  File file=new File(path);
  File[] tempList = file.listFiles();
  System.out.println("该目录下对象个数:"+tempList.length);
  for (int i = 0; i < tempList.length; i++) {
   if (tempList[i].isFile()) {
    System.out.println("文     件:"+tempList[i]);
   }
   if (tempList[i].isDirectory()) {
    System.out.println("文件夹:"+tempList[i]);
   }
  }
 }
}

4、一些总结
1.写程序的时候最后要加try catch
2.回执、数据在使用前要判空
3.更新之前要查看修改处
4.别人交付的东西要查看修改的地方
5.不懂不会的,先暂停去做其他的事情,都完了在攻克难题
6.仔细核对用户需求
7.用系统函数简化算法。
8.要考虑删除和确定之后去往何处,选择一个最佳的去处
9.当做多种值的判断时用boolean更好,比如周期、图片的选中
10.做图片库的选中时最好用tooglebutton,比button和check更好
11.当修改公共类的时候,如对一个项目中的AlertDialog、PopWindows做修改、添加时应考虑到增加判断,从而不让同样使用这个AlertDialog的地方产生bug。
(如增加了必要的监听时可以通过做null判断,解决没有赋值并产生空指针异常的问题。)
12.不在线不能操作的数据也应当显示,点击这类数据时可以不跳转,需要提示用户不在线

5、表达多个true/false时,可用一个string 8位的0/1值来表达,在传输时能节省流量
如String str=”00000”

    if(true){
        str+="0";
    }else{
        str+="1";
    }

6、弹出框
server弹出的dialog需要赋予
dialog.getWindow().setType((WindowManager.LayoutParams.TYPE_SYSTEM_ALERT));

7、查看sha1
自定义keystore
keytool -list -v -keystore elco_develop_key.jks
输入密码

8、组建接入问题:
methodscount.com 来查询常用库的方法数。
功能少的时候选方法少的库,从而减少项目负担

9、内存
1)使用Boolean的全局变量不要new Boolean()
2)Integer缓存了-128~127这256个数字,不要使用new Integer
3)用StringBuffer替代+
4)哈希表,见谅不要用于缓存,可以使用开源的ehcache,oscache通过FIFO,MRU等缓存算法来缓存从而达到提高系统运行速度的目的
5)避免过审的类层次结构和过深的方法调用(占内存)
6)变量在用到的时候在定义和实例化,范围能小尽量小,多次使用的String可以用全局常量
7)尽量避免使用static,可用final来替代
8)有向图管理进程精度高,效率低
9)内存回收置空
List myList=new ArrayList();
for (int i=1;i<100; i++) {
Object o=new
Object();
myList.add(o);
o=null;
}
//此时,所有的Object对象都没有被释放,因为变量myList引用这些对象。
当myList后来不再用到,将之设为null,释放所有它引用的对象。之后GC便会回收这些对象占用的内存。

10、内存泄漏检查工具
开发人员将根据这些信息判断程序是否有内存泄漏问题。这些工具包括Optimizeit
Profiler,JProbe Profiler,JinSight , Rational 公司的Purify等。
但最广泛应用的是LeakCanary

11、java程序设计中有关内存管理的经验
1.最基本的建议是尽早释放无用对象的引用。如对象置空
注:如果a 是方法的返回值,不要做这样的处理,否则你从该方法中得到的返回值永远为空,而且这种错误不易被发现、排除
2.尽量少用finalize函数。它会加大GC的工作量。
3.如果需要使用经常用到的图片,可以使用soft应用类型。它尽可能把图片保存在内存中
4.注意集合数据类型,包括数组、树、图、链表等数据结构,这些数据结构对GC来说,回收更为复杂。
5.尽量避免在类的默认构造器中创建、初始化大量的对象,防止在调用其自类的构造器时造成不必要的内存资源浪费
6.尽量避免强制系统做垃圾内
7.尽量避免显式申请数组空间
8.尽量做远程方法调用类应用开发时使用瞬间值变量,除非远程调用端需要获取该瞬间值变量的值。
9.尽量在合适的场景下使用对象池技术以提高系统性能。存的回收,增长系统做垃圾回收的最终时间

12、TouchMode
requestfocus() view的这个操作是将焦点转移到调用此方法的父控件上

13、线程和进程
线程
android:MainThread,WorkThread
进程
Active Progress
Visable Progress
Service Progress
Background Progress
Empty Progress

发布了66 篇原创文章 · 获赞 5 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/yuemitengfeng/article/details/80435916