時間の掛かる処理終了後に画面が表示される。
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 件のコメント:
コメントを投稿