1

私は Android 開発者の初心者なので、2 つのスレッドをバックグラウンドで同時に実行する (またはしない) ようにしたいと考えています。 )、「メイン」で待機したい、wifiテストがタイムアウトよりも速い場合は、ユーザーを1つのページに送信し、タイムアウトが発生した場合は、ユーザーを別のページに送信します。私はすでにスレッドを作成する必要があり、1 つは timeout+progressBar を実行し、その他の接続をチェックしています。私の問題は、高速スレッドが終了するのを誰が待つかということです。 t が表示され、一部のスレッドが終了するまでアプリケーションがフリーズします… =\

何か助けて?! 私の悪い英語を申し訳ありません...

public void startProgress() {

    Runnable r1 = new Runnable() {
        public void run() {
            for (int i = 0; i <= 10; i++) {
                final int value = i;
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                handler.post(new Runnable() {
                    public void run() {
                        progress.setProgress(value);
                    }
                });
            }
            setContentView(R.layout.error_menu);
            //finish();
        }
    };
    Thread th1 = new Thread(r1);
    th1.start();

    Runnable r2 = new Runnable() {
        // Setup the run() method that is called when the background thread
        // is started.
        public void run() {
            // Do you background thread process here...
            // Checking if WIFI is ON and IF URL is Reachable
            if(isOnline()){
                String URL_STR="http://10.0.1.2/ShopList_for_app.php";
                try
                {
                    URL url = new URL(URL_STR);
                    HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
                    urlc.setRequestProperty("User-Agent", "Test");
                    urlc.setRequestProperty("Connection", "close");
                    urlc.setConnectTimeout(7000); // This is time limit if the connection time limit
                    urlc.connect();
                    if (urlc.getResponseCode() == 200){ 
                        setContentView(R.layout.menu1);
                        //finish();//return;
                    }else{
                        //finish();//return;
                    }
                }
                catch (MalformedURLException e){
                    Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_LONG).show();
                    //finish();//return;
                }
                catch (IOException e){
                    Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_LONG).show();
                    //finish();//return;
                }
            }else{
                //finish();//return;
            }
        }
    };
    Thread th2 = new Thread(r2);
    th2.start();
    Toast.makeText(getBaseContext(), "..Correu todas as Threads..", Toast.LENGTH_LONG).show();


    while(true){
        if(th2.isAlive()){
            //Toast.makeText(getBaseContext(),"checking...", Toast.LENGTH_LONG).show();

        }else{              
            th1.interrupt();
            setContentView(R.layout.menu1);
            break;
        }           
            if(th1.isAlive()){
            //Toast.makeText(getBaseContext(),"checking...", Toast.LENGTH_LONG).show();

        }else{
            th2.interrupt();
            setContentView(R.layout.error_menu);
            break;
    }

}
}
4

0 に答える 0