2016-12-22 5 views
1

을 통해 나는 모든 프레임을 생성하는 새로운 Runnable() 때문에 다음과 같은 설계익명 클래스는 정적 확인 - 정적 방법

public void cntDownPossesion() { 

    ((Activity) context).runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 

       int poss = Integer.parseInt(possesionTextView.getText().toString()); 
       poss--; 
       possesionTextView.setText("" + poss); 
       iCount++; 
      } 

} 

에 대한 생각을 가지고있다. 나는 SurfaceView을 사용하며 workerthread를 사용합니다. textview은 mainthread에서 생성되므로 workersthread가 만질 수 없으므로 "poss"의 업데이트를 메인 스레드에 다시 넣어야합니다.

메모리 사용량이 많고 GC가 계속 유지되는지 모르겠습니까?

Runnable 개체를 정적으로 만들기 위해 Idea가 제공되었지만 내부 클래스 이후로는 불가능합니다. 문맥을 만드는 것은 어떨까요? cntDownPossesion 정적입니다 - 메서드가 정적 인 경우 Innerclass 그 자체는 정적이 아닙니까?

+0

아무것도'possesionTextView'와'iCount'있는 인스턴스 변수 –

답변

2

실제로 성능 병목 현상이라고 생각되면 Runnable을 멤버 변수로 추출 할 수 있습니다.

private Context context; 
private TextView possesionTextView; 
private int iCount; 

private final Runnable r = new Runnable() { 
    @Override 
    public void run() { 
     int poss = -1 + Integer.parseInt(possesionTextView.getText().toString()); 
     possesionTextView.setText(String.valueOf(poss)); 
     iCount++; 
    } 
}; 

public void cntDownPossesion() { 
    ((Activity) context).runOnUiThread(r); 
} 
+0

좋은 해결책 경우 정적 만들 수 있습니다,하지만 당신은 내 코드에서 성능 병목 현상이 있다고 생각합니까? _ 캔버스에 텍스트를 그릴 수 있지만 xml-layout을 사용하면 훨씬 간단합니다. – java

+1

잘 모르겠습니다. 코드가 없습니다. 메모리 사용량 또는 UI 지연을 보는 것은 사용자에게 달려 있습니다. –

관련 문제