問題描述:UI中btn的一個響應有耗時操作,另起線程來執行,UI依然有卡頓
代碼描述如下:
public class MyActivity extends Activity {
Button btnSend;
protected void onCreate(Bundle savedInstanceState) {
.....
btnSend=(Button) findViewById(R.id.btn_send);
btnSend.setOnclickListener(mListener);
}
OnClickListener mListener=new new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(sendable).start();
}
}
Runnable sendable = new Runnable() {
@Override
public void run() {
String data="data";
sendRemote(data);
}
}
/***因為具體的發送方法在服務裡,所以此處傳遞消息給
****服務處理,發送函數是一個耗時操作,發送之後等待回復或等至超時***/
private void sendRemote(String strData){
Intent iSend=new Intent("send");
iSend.putExtra("data", msg);
startService(iSend);
}
}
在這種情況下會有一個明顯的卡頓,我的疑問是:
1、另起線程並沒有完全將耗時程序從UI中剝離開來嗎?
2、即使未剝離開,UI線程啟動服務的操作也要一直等到 服務按要求啟動並執行相應的步驟(此處為發送信息)之後才算完成嗎?要不然也不應該卡頓啊
求高手指點,謝謝
問題比較明顯,肯定不是出在你貼出來的代碼中,請檢查你啟動的service的oncreate函數,看裡面是不是做了耗時操作,
service也是運行於UI線程,請在service的oncreate中創建thread做耗時操作