次のユースケースを持つアプリを作成しています。ユーザーが[開始]をクリックします。ボタンをクリックすると、アプリは1分ごとに(CameraPreviewクラスを内部的に使用して)画像のクリックを開始し、ボタンのテキストを「完了!」に変更します。
ユーザーが同じボタンを押すと(ただし、新しいボタンテキスト「Done!」が表示されます)、アプリは停止します。
ユーザーが「開始」をクリックすると、1分ごとに画像をクリックするコードを書くことができました。ボタン。ただし、画像のキャプチャが開始されると、ボタンがフリーズします。
ボタンがフリーズしないように、1分ごとに画像をキャプチャするロジックを実行するにはどうすればよいですか?その周りのベストプラクティスは何ですか?ありがとう!
OnClick()のコードは次のとおりです。
@Override
public void onClick(View v) {
Button button = (Button)v;
String buttonText = button.getText().toString();
if(buttonText.equals(Constant.trainButtonText)) {
Log.i(TAG, "Robot Training started...");
while(true) {
surfaceView.capture(new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
Log.v("Still", "Image data received from camera");
String[] params = new String[] {
Constant.Server, // Server URL
Long.toString(new Date().getTime()), // Image Timestamp
Constant.userId // Unique user ID for each customer
};
new UploadImageToWebServiceTask(data).execute(params);
camera.startPreview();
}
});
try {
// Capture every 1 minute until 'training done!' is not clicked
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
else if(buttonText.equals(Constant.doneTrainingButtonText)) {
Log.i(TAG, "Robot Training completed...");
button.setText(Constant.trainButtonText);
button.clearFocus();
}
}
コードでは、同じボタンが使用されています。ボタンのテキストに基づいて何をするかを決定するだけです。