我对以下设计有所了解
public void cntDownPossesion() {
((Activity) context).runOnUiThread(new Runnable() {
@Override
public void run() {
int poss = Integer.parseInt(possesionTextView.getText().toString());
poss--;
possesionTextView.setText("" + poss);
iCount++;
}
}
因为每帧都会创建一个新的Runnable()
。我使用SurfaceView
并使用了workerthread。 textview
是在mainthread上创建的,所以我必须将“poss”的更新回到主线程,因为worketraread无法触及它。
我想这可能会造成很高的内存消耗,并且不知道GC是否会继续运行?
我附带了Idea以使Runnable-object保持静态,但由于它是一个内部类,因此这是不可能的。那么创建上下文,即方法cntDownPossesion
是静态的 - 如果方法是静态的,那么Innerclass
本身是静态的,那么???
答案 0 :(得分: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);
}