onCreate()
私の活動の方法では、私はTimer
+ TimerTask
で、ParseQuery
を予定しています。 mainThread
にあるParseQuerry
コールバックで、簡単なUI更新を行うためにインターフェイスコールバックを委任します。これは、アクティビティを変更しない場合に機能します。しかし、アクティビティを終了してもう一度入力すると(ここでは新しいタイマーは作成されません。特定のポイントからアクティビティを開始したときにのみ作成されるためです)、動作しません。私はActivityインスタンスを持つものだと思っていますが、私はそれを処理できません。アクティビティを再起動した後、アクティビティUIを更新する
ParseQuery
が
done()
コールバックメソッドで実行され
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
....
uiTimer = new Timer();
uiTask = new TimerTask() {
@Override
public void run() {
doParseTask();
}
};
uiTimer.schedule(uiTask, shortCodeLeft);
}
doParseTask(){
Utils.doParseQuery(this, new MyListener{
@Override
public void onSuccess() {
updateUI();
}
});
}
updateUI(){
Log.i(TAG, "Show changed layout"); //This is always shown, this way I ensure it gets here!!
mTextView.setText(foo); //this doesn't work
mLayout.setVisibility(View.GONE); //this doesn't work
}
、私はUIを更新関数を呼び出す:
public class Utils{
.......
doParseQuery(Context ctx, MyListener listener){
.......
query.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if(e == null){
....
listener.onSuccess();
}
}
});
}
}
ノー成功を収めて、試してみました何:
1. make the `uiTimer` and `uiTask` static global variables; // I thought that maybe it gets leaked into activity instances
2. update the UI using
runOnUiThread(new Runnable() {
@Override
public void run() {}
});
OR
mLayout.post(new Runnable() {
@Override
public void run() {
mLayout.setVisibility(View.GONE);
}
});
3. android:launchMode= "singleInstance" //in Manifest