0

マルチスレッド用のプログラムをAndroidで作成しました。

ボタンの1つを押すと、スレッドが開始され、EditTextに値が出力されます。スレッドが実行されているかどうかを確認して、実行中の場合はクリック時にスレッドを停止し、ここで実行されていない場合は新しいスレッドを開始できるようにします。 muコードです:

public void startProgress(View view) {
        final String v;
        if(view == b1)
        {
            v = "b1";
        }
        else
        {
            v = "b2";
        }
        // Do something long
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                //for (int i = 0; i <= 10; i++) {
                while(true){
                    if(v.equals("b1"))
                    {
                        i++;
                    }
                    else if(v.equals("b2"))
                    {
                        j++;
                    }


                    try {
                        if(v.equals("b1"))
                        {
                            Thread.sleep(3000);
                        }
                        else if(v.equals("b2"))
                        {
                            Thread.sleep(1000);
                        }


                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            //  progress.setProgress(value);
                            if(v.equals("b1"))
                            {
                                String strValue = ""+i;
                                t1.setText(strValue);
                            }
                            else
                            {
                                String strValue = ""+j;
                                t2.setText(strValue);
                            }

                            //t1.setText(value);
                        }
                    });
                }
            }
        };
        new Thread(runnable).start();
    }

@Override
    public void onClick(View v) {
        if(v == b1)
        {
            startProgress(b1);
        }
        else if(v == b2)
        {
            startProgress(b2);
        }

    }
4

3 に答える 3

2

スレッドで静的AtomicBooleanを使用し、それに応じてその値を反転します。ブール値がtrueの場合、スレッドはすでに実行されています。trueの場合、スレッドを終了します。スレッドを終了する前に、値をfalseに戻します。

于 2012-10-22T11:05:50.273 に答える
2

その厄介なコードの代わりに、AsyncTaskは読みやすさを追加して必要な仕事をします...

それがまだ実行されているかどうかを通知getStatus()する機能もあります。

少し見回すと、たくさんの例が見つかります(ここでもう1つ書くつもりはありません)。上記のリンク先のドキュメントから1つをコピーします。


使用法

AsyncTaskを使用するには、サブクラス化する必要があります。サブクラスは少なくとも1つのメソッド(doInBackground(Params ...))をオーバーライドし、ほとんどの場合、2番目のメソッド(onPostExecute(Result))をオーバーライドします。

サブクラス化の例を次に示します。

 private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
     protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));
             // Escape early if cancel() is called
             if (isCancelled()) break;
         }
         return totalSize;
     }

     protected void onProgressUpdate(Integer... progress) {
         setProgressPercent(progress[0]);
     }

     protected void onPostExecute(Long result) {
         showDialog("Downloaded " + result + " bytes");
     }
 }

作成されると、タスクは非常に簡単に実行されます。

new DownloadFilesTask().execute(url1, url2, url3);
于 2012-10-22T11:10:18.313 に答える
0

スレッドのプロパティを確認する方法がいくつかあります

Thread is Alive()を確認できるのは

Thread.isAlive()メソッドそれはブール値を返します。

によって実行されている実行中のスレッドを見つけることができます

Thread.currentThread().getName()

ありがとう

于 2012-10-22T11:10:00.630 に答える