그 코드가 내 문제를 설명하는 데 도움이됩니다 다른 스레드의 실행에 대해보다 Runnable의 :대기열 안드로이드
public class TestHandlerActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new Thread(){
public void run(){
for (int i=0;i<20;i++){
handler.post(run);
}
}
}.start();
}
Handler handler=new Handler(){
};
Runnable run = new Runnable(){
public void run(){
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.d("TAG", "Message processed");
}
};
}
그 방법을 새로운 스레드는 메인 스레드에서 핸들러가 제공하는 청원을합니다. 내가해야 할 일은 정확히 반대입니다. UI 스레드는 다른 스레드에 의해 순차적으로 제공되는 청원서를 시작하며 (순서는 중요 함) 각 청원이 끝날 때 UI 스레드에 알릴 필요가 없습니다. 청원서는 3 개의 매개 변수 (int, int, boolean)를 가지며 데이터베이스에서 변경되며 사용자와 UI의 상호 작용에 의해 생성되므로 동시에 실행되지 않습니다. 감사합니다.
대기열을 비우는 작업자 스레드를 살펴보십시오. ConcurrentLinkedQueue와 같은 동시 큐 중 하나를 사용하여이를 수행 할 수 있습니다. – Steven
답장을 보내 주셔서 감사합니다. Steven, 저는 멀티 스레딩을 시작했습니다. ConcurrentLinkedQueue를 점검하고 (true) {if (queue.pool()! = null)/* pool * /}의 내용이 내 문제에 대해 작동하지만 CPU가 최적 상태가 아닌 것처럼 보입니다. 어떻게 향상시킬 수 있는지 설명해 주시겠습니까? 감사! – Jaimit