사용자가 EditText에 URL을 올리고 버튼을 누를 때마다 동영상을 다운로드하기 위해 algo를 사용하고 있습니다. algo는 사용자 연결 속도에 따라 약간의 시간이 소요되며 값을 계산하고 시간을내어 계산합니다. 모든 것이 잘 작동하지만 버튼을 두 번 클릭 할 때마다 앱이 중단되므로 코드가 완전히 실행될 때까지 기다려야합니다.어떻게 앱 크래시가 발생하지 않고 Android에서 버튼 클릭만으로 긴 코드를 실행할 수 있습니까?
0
A
답변
1
질문을 잘 이해하고 있다면 onClick을 두 번 실행하지 않으시겠습니까? 이를 수행하는 한 가지 방법은 활동 속성에 부울 (false)을 작성한 다음 onClick이 실행되면이를 "true"로 변경하는 것입니다. 예를 들어 : 다운로드 버튼을 다시 사용해야하는 경우
public class MainActivity extends AppCompatActivity {
public boolean clicked = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button button = (Button) findViewById(R.id.button_id);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(!clicked){
methodToExecuteYourTask();
clicked = true;
}
}
});
}
}
는 너 한테이 완료되면, 너 한테 다시 false로 부울의 값을 변경 검사를 추가하려고합니다. 이렇게하면 if 조건 안에있는 코드는 한 번만 실행됩니다.
0
UI 스레드가 아닌 스레드에서 수행해야합니다. 그러한 예를 보려면 다음 코드를 참조하십시오. Read more here.
public void onClick(View v) {
new Thread(new Runnable() {
public void run() {
// Do something in the background
}
}).start();
}
귀하의 질문에 더 많은 정보와 함께 응용 프로그램이 고장 났을 때 로그가 더해져야합니다! – Xenolion
백그라운드에서 긴 프로세스 또는 다운로드를 수행하는 비동기 작업이 있습니다. 플래그를 사용하여 프로세스 상태를 유지 보수하십시오. 다운로드가 시작되고 진행되면 프로세스를 다시 시작하지 마십시오. – shravani