case1:如何做到按back键不退出应用后台继续运行?
在基类activity会调用onBackPressed这个方法,这个方法会finish当前这个activity,使得当前activity走到onDestory,如果想要按back键不走到onDestory,需要复写onBackPressed方法
@Overridepublic void onBackPressed() {// TODO Auto-generated method stub// super.onBackPressed(); moveTaskToBack(true);}
调用moveTaskToBack(true),让任务在后台执行,与按home键的效果一样case2:android调试如何获得时间差1,引用如下命名空间:import java.util.Date;import android.text.format.DateFormat;2,设置时间格式:SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");3,获取时间:Date curDate = new Date(System.currentTimeMillis()); //PROCESSINGDate endDate = new Date(System.currentTimeMillis());long diff = endDate.getTime() – curDate.getTime();这样获取的就是时间间隔了,并且是ms级别的,通过log就可以打印出来
case3:listview如何在显示的时候默认跳转到最后一条记录开始的地方而不是结尾?
系统中listview显示很多条数据时,或者一条数据过长时,比如超过整个屏幕的高度,那么显示的时候就会自动跳转到最后一条数据的结尾,这是由属性transcriptMode来控制的
属性所用到值及意义为:
disabled 0 Disables transcript mode. This is the default value.
normal 1 The list will automatically scroll to the bottom when a data set change notification is received and only if the last item is already visible on screen.
alwaysScroll 2 The list will automatically scroll to the bottom, no matter what items are currently visible.
但是我们如果想要滚动,又不想让它跳转到最后一条记录开始的地方就要在代码中设置如下:
mListView.setSelection(listviewAdapter.getCount())
另外用transcriptMode属性的默认值即disabled
case4:在浏览器中反复测试同一问题有时会出现"浏览器停止运行"?比如说不断的添加书签,不断的点播视频等等
1.问题分析
出现这种问题一般会在main.log中打印如下trace:
11-19 06:00:46.570 880 1870 E CursorWindow: Could not allocate CursorWindow ‘/data/data/com.android.browser/databases/browser2.db’ of size 2097152 due to error -24
这代表是FD超标了,android中fd的数量上限为1024,超过此数目,就会报上述异常。
也可以用下述命令进一步确认是否是fd超标及哪些文件句柄超标:
adb shellps | busybox grep com.android.browser得到 pidlsof | busybox grep pid
用busybox命令必须保证是在userdebug版本而非user版本
如果发现用上述命令得到fd的数量很大,而且有不断递增的趋势,一般超过300就认为是异常了,最高不会超过1024
2.问题定位
首先是排查自己添加的代码有无fd泄漏,比如cusros没有关闭或者关闭异常,thread执行关闭没有释放,这些是最常见的fd超标。
确认自己的代码没问题,怀疑是平台的问题,就可以把log及browser代码提交给展讯来分析了。
caes5:在android中,常见的任务延迟怎么实现呢?
1.最常见的就是用thread了,一般为:
new Thread(new Runnable(){ public void run(){ Thread.sleep(n); handler.sendMessage();//去告诉主线程可以开始工作了 } }).start
2.用handler来实现
new Handler().postDelayed(new Runnable(){public void run(){ //做你想做的事}}, delay);
3.用timer来实现
timer = new Timer(true);timerTask = new TimerTask() {public void run() { //做你想做的事}};timer.schedule(timerTask, delay);
这三种方式是我们经常用到的。
4.用定时器AlarmManager来实现,我们经常用到的日历和闹钟就是主要用到了这个服务;主要功能就是在特定的时刻为广播一个指定的Intent;简单的说就是我们设定一个时间,然后在该时间到来时,AlarmManager为我们广播一个我们设定的Intent
case6:如何衡量代码性能?
Java和Android提供了以下的API,让应用可以测量时间及性能:
System.currentTimeMillis
System.nanoTime
Debug.threadCpuTimeNanos
SystemClock.currentThreadTimeMills
SystemClock.elapsedRealtime
SystemClock.uptimeMillis
以上函数即使有些方法返回时间用纳秒表示,并不意味着精度是纳秒级的。实际精度取决于平台。毫秒精度的一样的道理。
测试时间的典型代码:
long startTime = System.nanoTime();
//待测代码
long duration = System.nanoTime() – startTime;
这段代码全引用的java类,因此可以用在Android以外的平台。而Debug和SystemClock类是Android独有的。
尽管System.currentTimeMillis()可以作为测量时间的手段,但不建议使用这种方法,原因如下:
1)其精度和准确度不够
2)更改系统时间会影响其结果
明天的希望,让我们忘了今天的痛苦