在做android的消息队列时将刷新的频率提高到每秒1000次后activity刷新不过来.
测试使用的机器是onda VX610W豪华版
下面是测试代码
package my.test;
import java.util.Random;
import java.util.concurrent.ArrayBlockingQueue;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import android.widget.TextView;
public class AndroidTestCodeActivity extends Activity {
private String TAG = "Test";
private TextView tv1;
private TextView tv2;
private Handler handler;
private final int PULL = 0;
private final int PUSH = 1;
ArrayBlockingQueue<Integer> queue = new ArrayBlockingQueue<Integer>(100);
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv1 = (TextView)findViewById(R.id.textView1);
tv2 = (TextView)findViewById(R.id.textView2);
//use main activity looper
handler = new Handler(Looper.myLooper()) {
public void handleMessage(Message msg) {
Log.v(TAG, "Handle message");
switch (msg.what) {
case PULL:
Log.v(TAG, "PULL msg value " + msg.arg1);
tv1.setText("PULL " + String.valueOf(msg.arg1) + " " + String.valueOf(msg.arg2));
break;
case PUSH:
Log.v(TAG, "PUSH msg value " + msg.arg1);
tv2.setText("PUSH " + String.valueOf(msg.arg1) + " " + String.valueOf(msg.arg2));
break;
default:
break;
}
}
};
new Thread(new Runnable() {
public void run() {
try {
while (true) {
int arg = new Random().nextInt(100);
queue.put(arg);
Message msg = handler.obtainMessage();
msg.arg1 = arg;
msg.arg2 = queue.size();
msg.what = PUSH;
handler.sendMessage(msg);
Thread.sleep(1);
}
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}).start();
new Thread(new Runnable() {
public void run() {
try {
while (true) {
Integer m_take;
m_take = queue.take();
Message msg = handler.obtainMessage();
msg.arg1 = m_take;
msg.arg2 = queue.size();
msg.what = PULL;
handler.sendMessage(msg);
Thread.sleep(1);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
}