facebook twitter hatena line google mixi email

「Android/マルチスレッド」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(サンプルソース(toastなどを使う場合))
 
(同じ利用者による、間の3版が非表示)
行14: 行14:
 
  new Thread(new Runnable() {
 
  new Thread(new Runnable() {
 
     // マルチスレッド内でtoastなどを使う場合はこちらに記述
 
     // マルチスレッド内でtoastなどを使う場合はこちらに記述
     runOnUiThread(new Runnable() {
+
     activity.runOnUiThread(new Runnable() {
 
         public void run() {
 
         public void run() {
 
         Toast.makeText(getApplicationContext(), "test", Toast.LENGTH_LONG).show();
 
         Toast.makeText(getApplicationContext(), "test", Toast.LENGTH_LONG).show();
行27: 行27:
 
         setContentView(R.layout.activity_main);
 
         setContentView(R.layout.activity_main);
 
         Button btn = (Button)findViewById(R.id.button01);
 
         Button btn = (Button)findViewById(R.id.button01);
        btn.setText("please,click");
 
 
         btn.setOnClickListener(new View.OnClickListener() {
 
         btn.setOnClickListener(new View.OnClickListener() {
 
             public void onClick(View v) {
 
             public void onClick(View v) {
行34: 行33:
 
                 Log.i("threadexec", "ThreadSample処理開始");
 
                 Log.i("threadexec", "ThreadSample処理開始");
 
                 try {
 
                 try {
                     thread.join(); // Threadが終わるまで待機
+
                     // thread.join(); // Threadが終わるまで待機(途中で別のクリックイベントを処理させても処理されなくなってしまうのでおすすめしない)
                     // thread.join(2000); // 処理開始から2秒間待機だけ
+
                     thread.join(100); // 処理開始から0.1秒間待機だけ
 
                 } catch (InterruptedException e) {
 
                 } catch (InterruptedException e) {
 
                     e.printStackTrace();
 
                     e.printStackTrace();
 
                 }
 
                 }
 
                 Log.i("threadexec", "ThreadSample処理終了");
 
                 Log.i("threadexec", "ThreadSample処理終了");
 +
            }
 +
        });
 +
        Button btnCheck = (Button)findViewById(R.id.button02);
 +
        btnCheck.setOnClickListener(new View.OnClickListener() {
 +
            public void onClick(View v) {
 +
                Log.i("threadexec", "isAlive=" + thread.isAlive());
 
             }
 
             }
 
         });
 
         });
行63: 行68:
 
  android:id="@+id/button01">
 
  android:id="@+id/button01">
 
  </Button>
 
  </Button>
 +
 +
==関連==
 +
[[Android/handler]] [ショートカット]

2019年9月11日 (水) 18:50時点における最新版

サンプルソース

// マルチスレッドロード
new Thread(new Runnable() {
    @Override
    public void run() {
         // ここにロジックを書く
    }
}).start();

サンプルソース(toastなどを使う場合)

// マルチスレッドロード
new Thread(new Runnable() {
    // マルチスレッド内でtoastなどを使う場合はこちらに記述
    activity.runOnUiThread(new Runnable() {
        public void run() {
        Toast.makeText(getApplicationContext(), "test", Toast.LENGTH_LONG).show();
        }
    });
}).start();

秒カウント処理

   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       Button btn = (Button)findViewById(R.id.button01);
       btn.setOnClickListener(new View.OnClickListener() {
           public void onClick(View v) {
               ThreadSample thread = new ThreadSample();
               thread.start();
               Log.i("threadexec", "ThreadSample処理開始");
               try {
                   // thread.join(); // Threadが終わるまで待機(途中で別のクリックイベントを処理させても処理されなくなってしまうのでおすすめしない)
                   thread.join(100); // 処理開始から0.1秒間待機だけ
               } catch (InterruptedException e) {
                   e.printStackTrace();
               }
               Log.i("threadexec", "ThreadSample処理終了");
           }
       });
       Button btnCheck = (Button)findViewById(R.id.button02);
       btnCheck.setOnClickListener(new View.OnClickListener() {
           public void onClick(View v) {
               Log.i("threadexec", "isAlive=" + thread.isAlive());
           }
       });
   }
   public class ThreadSample extends Thread {
       public void run(){
           for (int i = 0; i < 5; i++) {
               try {
                   Thread.sleep(1000); // 1秒待機
                   Log.i("threadexec", (i + 1) + "秒経過");
               } catch (InterruptedException e) {
                   e.printStackTrace();
               }
           }
       }
   }

レイアウト

<Button
android:text="Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button01">
</Button>

関連

Android/handler [ショートカット]