2017-03-22 1 views
0

클릭 수신기에서 텍스트 뷰로 연결 한 경우 클릭 리스너에서 f1이 호출되고 f2가 호출되면 f2가 호출되는 함수가 호출됩니다.Android ProgressDialog가 화면에 나타나려면 시간이 필요합니다.

내부 f2 나는 현재 활동 컨텍스트를 사용하여 안드로이드 ProgressDialog 객체를 만들고 progressDialog 객체에 show function을 호출했습니다. ProgressDialog는 화면에 5-6 초 정도 표시되는 데 시간이 걸립니다.

내 코드를 분석했지만이 시간이 왜 걸리는 지 이해할 수 없습니까?

textView.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

       ShowSyncDialog(); - f1 
     } 
    }); 

    public void ShowSyncDialog() 
    { 
     fnSyncOfflineData(); - f2 
    } 

    public void fnSyncOfflineData() 
    { 
     ProgressDialog progressDialog = new ProgressDialog(context); 
     progressDialog.show(); 

     //other code 
    } 
+1

일부 코드 스 니펫을 추가하십시오. –

답변

0

당신은 AsyncTask에서 함수를 호출한다. 또한이 작품의 시작 부분에 ProgressDialog을 표시해야합니다. 이 같은 것을 사용

public class YourTask extends AsyncTask<String, Void, String> { 

    private Context mContext; 
    private ProgressDialog progressDialog; 

    public YourTask(Context context) { 
     super(); 
     mContext = context; 
     progressDialog = new ProgressDialog(context); 
     progressDialog.setMessage("Your Message"); 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     progressDialog.show(); 
    } 

    @Override 
    protected String doInBackground(String... values) { 
     // If you want to use 'values' string in here 
     String values = values[0]; 

     String yourResult = yourFunction(); 

     return yourResult; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     progressDialog.dismiss(); 

     // Your task has done 
     ... 
    } 
} 

그런 다음에이 작업을 호출

new YourTask(YourActivity.this).execute(); 

당신은 작업 doInBackground 방법의 반환 유형을 변경할 수 있습니다. 이것은 단지 예일 뿐이므로 AsyncTask을 검색 할 수 있습니다.

행운을 빈다.

+0

하지만 모든 작업을 시작하기 전에 ProgressDialog가 표시되므로 시간이 오래 걸립니다. fnSyncOfflineData는 시간이 걸리는 웹 API 호출이나 다른 작업이없는 단순한 함수입니다. – gautam

+0

안다. 그러나 이것이 안드로이드 시스템이 작동하는 방법이다. 당신은 하나의 스레드에 있습니다. 함수가 호출되기 전에 progressDialog.show()를 호출했습니다. 대화 상자가 아직 표시되지 않으면 함수가이 단일 스레드를 잠글 수 있습니다. –

+0

하지만 단일 스레드에서 실행은 한 단계 씩 진행되므로 progressDialog.show()가 호출되면 먼저 실행해야합니다. progressDialog.show() 로그가 인쇄되기 전과 후에 로그를 썼습니다. 진행 대화 상자에 시간이 걸립니다. – gautam

관련 문제