-5

Android でスレッドを使用する単純なアプリケーションに取り組んでいます。アプリケーションに次のコードがあります。しかし、これは機能していないようです。

l = (RelativeLayout)findViewById(R.id.layout_main);
p = new LayoutParams(100, 100);
i = new ImageView(getApplicationContext());
i.setImageResource(R.drawable.bb);
i.setLayoutParams(p);
i.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
    if (running) {
        running = false;
    } else {
        new Thread(new Runnable() {
        @Override
        public void run() {
            while (running) {
                try {
                    Log.d("INFO", "Thread executing");
                    Thread.sleep(100);
                } catch (Exception e) {
                    running = false;
                }
            }
        }
        }).start();
    }

    return false;
}
});
l.addView(i);

ログも印刷されていません。

編集:running = false;コードの前です

4

3 に答える 3

1

Androidのメインスレッドでスレッドを実行すると、メモリが少ない場合のパフォーマンスが非常に悪くなります

ジョブを並行して実行するこの非同期タスクを確認してください

private class DownloadWebPageTask extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... urls) {
      String response = "";
      for (String url : urls) {
        DefaultHttpClient client = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url);
        try {
          HttpResponse execute = client.execute(httpGet);
          InputStream content = execute.getEntity().getContent();

          BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
          String s = "";
          while ((s = buffer.readLine()) != null) {
            response += s;
          }

        } catch (Exception e) {
          e.printStackTrace();
        }
      }
      return response;
    }

    @Override
    protected void onPostExecute(String result) {
      textView.setText(result);
    }
  }

  public void onClick(View view) {
    DownloadWebPageTask task = new DownloadWebPageTask();
    task.execute(new String[] { "http://www.vogella.de" });

  }
于 2013-08-06T12:57:35.950 に答える