2017-12-11 2 views
0

사용자가 EditText에 URL을 올리고 버튼을 누를 때마다 동영상을 다운로드하기 위해 algo를 사용하고 있습니다. algo는 사용자 연결 속도에 따라 약간의 시간이 소요되며 값을 계산하고 시간을내어 계산합니다. 모든 것이 잘 작동하지만 버튼을 두 번 클릭 할 때마다 앱이 중단되므로 코드가 완전히 실행될 때까지 기다려야합니다.어떻게 앱 크래시가 발생하지 않고 Android에서 버튼 클릭만으로 긴 코드를 실행할 수 있습니까?

+0

귀하의 질문에 더 많은 정보와 함께 응용 프로그램이 고장 났을 때 로그가 더해져야합니다! – Xenolion

+0

백그라운드에서 긴 프로세스 또는 다운로드를 수행하는 비동기 작업이 있습니다. 플래그를 사용하여 프로세스 상태를 유지 보수하십시오. 다운로드가 시작되고 진행되면 프로세스를 다시 시작하지 마십시오. – shravani

답변

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(); 
}