다음과 같은 현상이 있습니다. 다른 클래스에서 이미지보기를 변경하려면 runOnUiThread() 메서드를 사용하고 있습니다. mainclass.runOnUiThread (새로운 Runnable ...)를 사용하여 호출하고 있습니다. 응용 프로그램이 처음 실행될 때 작동하지만 뒤로 단추를 눌러 응용 프로그램을 종료 한 다음 응용 프로그램을 다시 시작하면 이미지보기가 더 이상 업데이트되지 않습니다. 내가 찍은 로그는 모든 것이 잘되고 실행 중이라는 것을 보여 주지만 이미지보기는 바뀌지 않습니다. 오류가 발생하지 않고 응용 프로그램을 실행할 때 충돌이 발생하지 않고 이미지보기가 업데이트되지 않습니다. 무슨 일이 일어날 지 모르는 어떤 생각?runOnUiThread가 응용 프로그램이 파괴되었을 때 작동을 멈 춥니 다.
편집 * : 그래서 내가 실제로 활동을 peerActivity 다른 클래스 참조를 보유하고 ivPHoto은 이미지보기입니다
peerActivity.runOnUiThread(
new Runnable(){
@Override
public void run() {
Log.v("[email protected]", "Thread is running");
Log.v("[email protected]", decodedImage.toString());
// TODO Auto-generated method stub
peerActivity.ivPhoto.setImageBitmap(decodedImage);
Log.v("[email protected]", "Past UI Change");
}
});
를 확장하지 않는 클래스의 이미지 뷰를 변경하려면 사용하고 있습니다 것입니다. 내가해야 할 일은 프로그램이 닫힐 때 그 스레드를 죽이는 방법을 찾는다는 것입니다 (프로그램 관리자에 들어가면 Force Close 버튼을 사용할 수 있습니다). 이 일을 할 수있는 방법이 있습니까?
Edit2 * : UI 스레드에서 작업하는 데 여러 가지 다른 방법을 시도했는데 모두 동일한 결과를주었습니다.이 프로그램은 처음 실행될 때 완벽하게 작동하지만 뒤로 버튼을 누르고 닫으면 다시 열면 이미지보기가 더 이상 업데이트되지 않습니다. 강제로 앱을 강제 종료하면 앱을 닫고 다시 열 때까지 다시 작동합니다.
별도의 스레드에서 이미지를 디코딩한다고 생각합니다. AsyncTask를 사용하고 있습니까? 그렇지 않다면, 확실히 그쪽으로 움직여야합니다. http://developer.android.com/reference/android/os/AsyncTask.html 디코딩 된 이미지를 onPostExecute() 메소드로 리턴하고 거기에 설정하면 문제가 해결됩니다. onPostExecute() 및 onPreExecute() 및 onProgressUpdate() 모두 UI 스레드에서 실행되므로 항상 작동해야합니다. –