使匿名类静态 - 通过静态方法

时间:2016-12-22 05:51:55

标签: java android static anonymous-class

我对以下设计有所了解

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本身是静态的,那么???

1 个答案:

答案 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);
}