0%

二分查找的前提是所查找的数组已经有序。在查找过程中,

每次取出中间的元素,与目标数值比较,若相等则直接返回;

若不等,则根据排序规则在一侧中继续查找,直到这一侧元素仅剩一个时,

若与目标元素相等,则直接返回;否则表明数组中没有待查找元素。

阅读全文 »

在Java中可以通过wait()与notify()或notifyAll()实现线程协作。简要总结有如下几点:
1.wait()让线程进入等待状态,并释放锁(而sleep等待的同时并不释放锁)
2.notify()通知wait的线程尝试获取对象锁,在此线程任务执行完后,wait的线程就会重新获得锁,继续运行。
3.wait与notify均是Object的方法,调用这两个方法需要在synchronized代码块或函数中执行,否则会抛出异常。

阅读全文 »

在Android中使用加速度传感器可以帮助我们识别手机的姿态及运动状态。
使用加速度传感器与其他传感器的方法大致相同,通过调用系统API就可以实现。分为以下几步:

  1. 获取SensorManager
  2. 使用SensorManager获取加速度传感器
  3. 创建自定义的传感器监听函数,并注册
  4. 相对应的,在合适位置实现注销监听器的调用
阅读全文 »

1
2
3
4
5
6
7
8
9
10
11
09-05 14:42:17.606: E/AndroidRuntime(28219): Caused by: java.lang.IllegalStateException: closed
09-05 14:42:17.606: E/AndroidRuntime(28219): at okhttp3.internal.http.Http1xStream$ChunkedSource.read(Http1xStream.java:414)
09-05 14:42:17.606: E/AndroidRuntime(28219): at okio.Buffer.writeAll(Buffer.java:993)
09-05 14:42:17.606: E/AndroidRuntime(28219): at okio.RealBufferedSource.readByteArray(RealBufferedSource.java:106)
09-05 14:42:17.606: E/AndroidRuntime(28219): at okhttp3.ResponseBody.bytes(ResponseBody.java:128)
09-05 14:42:17.606: E/AndroidRuntime(28219): at okhttp3.ResponseBody.string(ResponseBody.java:154)
09-05 14:42:17.606: E/AndroidRuntime(28219): at com.example.nettest.MainActivity$MyAsyncTask.doInBackground(MainActivity.java:78)
09-05 14:42:17.606: E/AndroidRuntime(28219): at com.example.nettest.MainActivity$MyAsyncTask.doInBackground(MainActivity.java:1)
09-05 14:42:17.606: E/AndroidRuntime(28219): at android.os.AsyncTask$2.call(AsyncTask.java:292)
09-05 14:42:17.606: E/AndroidRuntime(28219): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
09-05 14:42:17.606: E/AndroidRuntime(28219): ... 4 more

这个错误是由于response.body().string()调用了多次导致的,string()仅可调用一次。

在列表中显示多个下载进度条是一个很常见的需求了,
这个需求主要涉及到以下两个技术点:
1.Handler异步更新UI
2.ListView进行局部更新

今天来看一下这一功能最简单的实现——模仿多个APP下载更新进度条。
为了让代码简单一些,在这里使用了ListView显示列表,直接使用线程控制进度更新。

阅读全文 »

在XCode6以上版本中,苹果添加了用于异步回调测试的api,因此不用像旧版本那样,发起异步调用后通过循环查询标志位,来检查异步回调函数的调用了。
在新版本中直接使用XCTestExpectation的API即可实现这一功能。

阅读全文 »

AIDL是实现Android中IPC的一种方式。
通过AIDL我们将各种通信操作以接口方式进行定义,Android SDK则会按照AIDL的规则将AIDL编码成java类嵌入到应用中,然后我们就可以在APP运行时以调用函数的形式来进行IPC了。

阅读全文 »