0

私のアプリでは、いくつかの要件のためにサービスを使用しています.Activity1からActivity2に切り替えると、数秒間空白の画面が表示されます. いくつかのサービスを持つActivity2では、これは私が使用しているコードです

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if(isOnline()){

    }else{ 
        alert();
    }
    dialog = new ProgressDialog(this);   
    dialog.setCancelable(false);
    app_preferences = new AppPreferences(this);
    new LongOperation().execute();

    setContentView(R.layout.activity_accounts); 
}

asynctask を使用して onCreate() からサービスを開始します。new LongOperation().execute();

private class LongOperation extends AsyncTask<String, Void, String> {
    @Override
    protected void onPreExecute() {          
        ProgressBar_show();
    }
    @Override
    protected String doInBackground(String... params) { 
        LoggingAccounts();
        return null;
    }
    @Override
    protected void onPostExecute(String result) {        
        ProgressBar_hide();
    } 
}

private void LoggingAccounts() {

    Account_Added_Log_States();

    ArrayList<AccountInfo> _Accounts_list = new ArrayList<AccountInfo>();
    accounts_data = new AccountDataSource(this);
    accounts_data.open();       
    _Accounts_list = accounts_data.getAllAccounts();
    accounts_data.close();       
    Log.i(TAG, "No of acc's-" + _Accounts_list.size()); 

    for(AccountInfo acc : _Accounts_list) {
        Log.i(TAG, "Acc type " +acc.getAcc_Type());

        if(acc.getAcc_Type().equals(UsedStrings.GoogleAccount) && Gtalk_Log_State ) {
            /////// service start
            final Intent gtalk_intent = new Intent(AccountsActivity.this, GtalkService.class);
            gtalk_intent.putExtra("Key", "gtalk service*****");
            gtalk_intent.putExtra("user_name", acc.getAcc_Name());
            gtalk_intent.putExtra("user_pass", acc.getAcc_Pass());
            Thread t = new Thread(){
                public void run(){
                    startService(gtalk_intent);
                }
            };
            t.start(); 
        }
    }
}

このように、私はこのアクティビティで 3 つの異なるサービスを使用しています。空白の画面になるアクティビティから切り替えるとき。

4

1 に答える 1

1

ここで私が見ている唯一の問題は、最初に AsyncTask を呼び出し、UI スレッド、次にバックグラウンド、そして再び UI スレッドを呼び出すコンテンツ ビューを設定することです。その後、ContentView を設定して、進行状況ダイアログが setConterView の後にある UI スレッドがレンダリングされるのを待っています。

以下の行を入れ替えます

new LongOperation().execute();

 setContentView(R.layout.activity_accounts); 

setContentView(R.layout.activity_accounts); 
 new LongOperation().execute();
于 2013-03-01T05:51:41.937 に答える