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