時間の掛かる処理終了後に画面が表示される。
import android.os.Bundle;
import android.app.Activity;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
waitTime();// 時間のかかる処理
Toast.makeText(this, "時間の掛かる処理終了後に実行されるはず", Toast.LENGTH_LONG).show();
}
private void waitTime() {
// TODO 自動生成されたメソッド・スタブ
try {
Thread.sleep(10 * 1000);
} catch (InterruptedException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
}
Java標準のThreadを利用した並列処理を使った場合
時間の掛かる処理終了前に画面が表示される
import android.os.Bundle;
import android.app.Activity;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread(new Runnable() {
public void run() {
// TODO Auto-generated method stub
waitTime();// 時間のかかる処理
}
}).start();
Toast.makeText(this, "時間の掛かる処理終了前に表示されるはず", Toast.LENGTH_LONG).show();
}
private void waitTime() {
// TODO 自動生成されたメソッド・スタブ
try {
Thread.sleep(10 * 1000);
} catch (InterruptedException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
}
UI操作を行う場合 Handler を使う
時間の掛かる処理からデータを受け取ってUIを操作している。
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private TextView textView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView1);
final Handler handler = new Handler();
new Thread(new Runnable() {
public void run() {
// TODO Auto-generated method stub
final int num = waitTime();//時間のかかる処理
handler.post(new Runnable() {
public void run() {
//int num = waitTime();// ここに置いたら別スレッドにならない
textView.setText("UIを変更::" + num);
}
});
}
}).start();
Toast.makeText(this, "これが先に実行されるはず", Toast.LENGTH_LONG).show();
}
private int waitTime() {
// TODO 自動生成されたメソッド・スタブ
try {
Thread.sleep(10 * 1000);//10秒待つ
} catch (InterruptedException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
return 2012;
}
}





0 件のコメント:
コメントを投稿