2013-08-06 34 views
-5

我正在使用Android中的線程進行簡單的應用程序工作。我的應用程序中有以下代碼片段。但這似乎並沒有奏效。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;是代碼

+1

它因爲while條件中的代碼永遠不可達,因爲變量'running'從未設置爲true;試試這個: 'if(running){ running = false;其他{ running = true; while(running){...}' – Houcine

+0

@Houcine我最初設置爲false運行。這是在我的onCreate方法 –

+1

所以如果你的運行是錯誤的,那麼while將不會被執行,因爲你正在測試運行== true('while(running)') – Houcine

回答

4

從未達到與記錄前的部分。如果running爲true,則它被設置爲false,並且else分支未被執行。如果它是假的,那麼循環從不執行。

您應該在0123分支中設置runningtrue。另請注意,running應該是volatile(如果尚未)確保它沒有在while循環中進行本地緩存。

-1

試試這個:

i.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     // Your code here.   
    } 
} 
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" }); 

    } 
+0

感謝您的迴應。將嘗試。 –

相關問題