Android的基本工作原理上的兩個螺紋類型,即UI線程和後臺線程。根據android文檔 -
不要從UI線程外部訪問Android UI工具包來解決這個問題,Android提供了幾種方法從其他線程訪問UI線程。這裏有一個可以幫助的方法列表:
Activity.runOnUiThread(Runnable)
View.post(Runnable)
View.postDelayed(Runnable, long)
現在有各種方法來解決這個問題。我將代碼示例
runOnUiThread用於運行一個線程一個消息循環
new Thread()
{
public void run()
{
myactivity.this.runOnUiThread(new runnable()
{
public void run()
{
//Do your UI operations like dialog opening or Toast here
}
});
}
}.start();
LOOPER
類解釋它。線程默認沒有與它們相關的消息循環;創建一個,在要運行循環的線程中調用prepare(),然後循環()使其處理消息,直到循環停止。
class LooperThread extends Thread {
public Handler mHandler;
public void run() {
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(Message msg) {
// process incoming messages here
}
};
Looper.loop();
}
的AsyncTask
的AsyncTask允許您在用戶界面上執行異步工作。它在工作線程中執行阻塞操作,然後將結果發佈到UI線程上,而無需您自己處理線程和/或處理程序。
public void onClick(View v) {
new CustomTask().execute((Void[])null);
}
private class CustomTask extends AsyncTask<Void, Void, Void> {
protected Void doInBackground(Void... param) {
//Do some work
return null;
}
protected void onPostExecute(Void param) {
//Print Toast or open dialog
}
}
處理器
一個處理程序允許您發送和處理消息並Runnable對象與線程的MessageQueue關聯。
Message msg = new Message();
new Thread()
{
public void run()
{
msg.arg1=1;
handler.sendMessage(msg);
}
}.start();
Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if(msg.arg1==1)
{
//Print Toast or open dialog
}
return false;
}
});
http:// stackoverflow。COM /問題/ 4208730 /如何對檢測用戶不活動功能於Android的 – Amar
而在inactivitydetected重載公共無效()我用吐司功能 – Amar