android app onCreate 일부 구형 장치에서 느려질 수있는 코드가 있습니다. 모든 init 코드가 실행되는 동안 progressdialog 표시를 갖고 싶습니다. 더 많은 코드가 UI를 차단하기 때문에 onCreate에서 호출하면 대화 상자가 표시되지 않습니다. 따라서 AsyncTask에 들어가야합니다.asyctask에 progressdialog가 표시되지 않습니다.
이것은 제 작업입니다.
class startupTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
pd = new ProgressDialog(mainContext);
pd.setMessage("Starting up. Please wait...");
pd.setIndeterminate(true);
pd.setCancelable(false);
pd.show();
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
MainActivity.this.runOnUiThread(new Runnable() {
public void run() {
pd.show();
runInit();
}
});
return null;
}
@Override
protected void onPostExecute(Void result) {
if (pd != null) {
pd.dismiss();
}
super.onPostExecute(result);
}
}
하지만 여전히 대화 상자가 표시되지 않습니까? runInit은 일반적인 저속 시작 코드입니다. 그것은 UI에서 실행해야합니다.
pd.dismiss 호출을 제거하면 init 코드가 완료되면 진행 대화 상자가 표시되므로 확인이 작성되고 표시되지 않습니다.
다른 게시물에 따르면 위 코드는 올바른 방법이지만 onCreate에서 호출하면 작동하지 않는 것 같습니다.
전화를 건 후에 대화 상자를 표시하도록 할 수있는 방법은 없습니까? 대화 상자를 표시하고 계속하기 전에 표시 될 때까지 기다릴 수있는 방법은 없습니까?
도움 주셔서 감사합니다.
EDIT : 결국 코드를 재구성하고 코드를 재구성하여 느린 비 UI 코드 만 AsyncTask에 포함되도록해야했습니다. 이것은 그것을 작동 시켰습니다.
왜 전화하는'pd.show() : 여기
은 예입니다? – Sharj대화 상자를 표시하려는 시도입니다. 도움이되지 않았다. – Some1Else
문제는 "runInit은 일반적인 느린 시작 코드입니다. 사용자 인터페이스에서 실행해야합니다"라는 문구에 있습니다. 이것은 asynctask의 목적을 무효로 만듭니다. asynctask는 UI 스레드에서 그 것을 제거합니다. runInit()이 무엇을하는지 설명하고 누군가가 UI 스레드 외부에서이를 수행하는 방법을 찾도록 도울 수 있습니다. – alzee