Android 开发小技巧(1)

来源:互联网 发布:iphone6s蜂窝数据快捷 编辑:程序博客网 时间:2024/06/05 00:18

在android开发时需要注意以下的细节问题:

1.一个显示系统可用内存的方法


在进行android开发时,因为设备上的内存较小,有很多的程序在模拟器上运行没有问题,但是到了设备上就会经常因内存溢出而使程序崩溃.那么遇到这类问题应该如何解决呢?根据我的开发经验,使用一下步骤进行解决.
StringBuffer sbf=new StringBuffer();      private void displayAvailMemory() {           final ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);           ActivityManager.MemoryInfo outInfo = new ActivityManager.MemoryInfo();          activityManager.getMemoryInfo(outInfo);           sbf.append("\n================剩余内存:---->").append(outInfo.availMem >> 10).append("k");          Log.i(TAG, sbf.toString());      }  
选取一个程序不用的按键(如打电话键),或者在界面的超类添加一个显示内存的菜单,然后让这个按键或添加的菜单的事件相应为调用显 示剩余内存的方法。
在怀疑会产生内存泄漏的地方的操作后点击上面定义的按键(如打电话键),然后在LogCat中观察显示内存的变化。


2.setText方法的使用细节


在调用很多组件的setText()方法时,如果设置的值为数字,不能直接将数字传入,需要将数字转换为String才能得到 正确的结果。


3.setColor方法的使用细节


在调用setColor时,如果传入的是一个resid,需要调用getResource().getColor(int resId),获取正确的颜色值,才能得到正确的结果。


4.获取View的Height和Width的合适时机


在View被添加到父组件时,调用View的getHeight方法和getWidth获取的结果都为0,只有当组件被画出来以后   ,调用这两个方法才能获得正确的结果。有2个方法可以获取组件的实际尺寸:
当此组件有事件触发的时候,因为只有组件被画出来了,才能接受事件。比如在点击或触摸,长按等事件触发时调用该组件的这两个方法,就可以获取正确的结果。

在这个组件的onDraw方法里面调用这两个方法,也可以获取正确的结果。


5.如何正确设置View的Width和Height属性


  在代码中设置View的Width和Height属性,不能通过setWidth或setHeight方法进行设置,需要调用getLayoutParams().进行设置,例如:

 view.getLayoutParams().width=100; view.getLayoutParams().height=100;

6.SQlite的问题


   如果在对SQLite进行操作时database is locked ,可能是SQLiteDatabase没有close

7.如何减少Android系统中的ANR问题


 1).尽量在主线程中少做事情,尤其是一些耗时较长的操作。主线程只负责构造界面,响应用户的事件。耗时较长的    操作可以采用多线程或AsyncTask,并且尽量采用AsyncTask。并且一些button或player等组件的监听器也是执行的主线程,也不能有太多的操作。

 2).主线程和监听器的方法中不能有Thread.sleep()。否则也会阻塞主线程。

8.在android源码中编译自己的模块


在进行android下的jni开始时,我们编写的有些C/C++代码需要访问android中的一些C/C++的头文件,这些头文件没有在NDK中包含,不能再NDK中直接编译。只能放入到android的源码中进行编译。编译的方法为:

1).在android的源码的development路径下创建一个文件夹,取名为screen(可以取任意的名称),然后将需要编译的C/C++文件放入这个文件夹,然后编写makefile文件Android.mk,内容大致如下:

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_LDLIBS := -lm -llog//这一句是可选的,如果代码中使用android中的记录日志的api,就需要加上,否则不需要加上。LOCAL_MODULE := HelloWorld LOCAL_SRC_FILES := HelloWorld.cppinclude $(BUILD_EXECUTABLE) 此处设置为生成可执行的目标码,如果生成so共享库,则需要修改为include $(BUILD_SHARED_LIBRARY)



2).然后在android源码的根目录下运行make HelloWorld就在out\target\product\generic\system\bin生产了可执行的目标码,如果makefile中指定为生产共享库,在生成的so文件在out\target\product\generic\system\lib文件夹下

9.android上设置静态ip

如果在运行android程序时,经常报出java.net.UnknownHostException可能是就是dns有问题,这时可以尝试一下将设备设置为固定IP。设置的方法为Settings—>Wireless Controls—>Wi-Fi setting(通过menu) —>Advanced.然后在Advanced界面进行设置,设置方法同PC。

10.Android WiFi 电源管理


Android 对WiFi电源管理的代码主要在WifiService.java中。如果应用程序想在屏幕被关掉后继续使用WiFi则可以调用acquireWifiLock来锁住WiFi,该操作会阻止WiFi进入睡眠状态。当应用程序不再使用WiFi时需要调用releaseWifiLock来释放WiFi。之后WiFi可以进入睡眠状态以节省电源。
    默认情况下当屏幕被关掉以后,如果没有应用程序在使用WiFi,WiFi会在2分钟后进入睡眠状态。这主要是为防止频繁地改变WiFi的电源模式。

原创粉丝点击