Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在活动(带有服务的活动)之间切换时出现空白屏幕?_Android_Service - Fatal编程技术网

Android 在活动(带有服务的活动)之间切换时出现空白屏幕?

Android 在活动(带有服务的活动)之间切换时出现空白屏幕?,android,service,Android,Service,在我的应用程序中,我使用服务来满足某些需求,当我从Activity1切换到Activity2时,我的屏幕会出现几秒钟的空白。在Activity2中有一些服务,这是我正在使用的代码 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if(isOnline()){ }else{ alert(); }

在我的应用程序中,我使用服务来满足某些需求,当我从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()启动服务<代码>新长操作().execute()

私有类LongOperation扩展了异步任务{
@凌驾
受保护的void onPreExecute(){
ProgressBar_show();
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
记录账目();
返回null;
}
@凌驾
受保护的void onPostExecute(字符串结果){
ProgressBar_hide();
} 
}
私人无效记录帐户(){
帐户添加了日志状态();
ArrayList_Accounts_list=新建ArrayList();
accounts\u data=新的AccountDataSource(此);
accounts_data.open();
_Accounts_list=Accounts_data.getAllAccounts();
accounts_data.close();
Log.i(标记“acc的编号-”+_Accounts_list.size());
对于(AccountInfo acc:\u Accounts\u list){
Log.i(标记“Acc type”+Acc.getAcc_type());
if(acc.getAcc_Type().equals(UsedStrings.GoogleAccount)和&Gtalk_Log_状态){
///////服务启动
最终意图gtalk_Intent=新意图(AccountsActivity.this,GtalkService.class);
gtalk_intent.putExtra(“键”,“gtalk服务******”);
gtalk_intent.putExtra(“用户名”,acc.getAcc_name());
gtalk_intent.putExtra(“用户通行证”,acc.getAcc_通行证());
线程t=新线程(){
公开募捐{
startService(gtalk_意向);
}
};
t、 start();
}
}
}

像这样,我在这个活动中使用了3种不同的服务。当我从活动切换到空白屏幕时。

我在这里看到的唯一问题是,您首先调用AsyncTask,然后设置内容视图,该视图将调用UI thred,然后是Background,然后再调用UI thread。在这之后,您需要设置ContentView,因此将发生的是进度对话框正在等待UI线程获得渲染,而渲染将在setConterView之后

交换下面的行

new LongOperation().execute();

 setContentView(R.layout.activity_accounts); 


服务代码在哪里?你是说AsycTask是服务吗?没有变化,即使我像你说的那样交换了上面的行。尽管如此,我还是得到了一个空白屏幕,我认为服务启动有问题。你到底在哪里启动服务?检查上面的代码,我正在LoggingAccounts()函数中启动活动,该函数是从asyncTask DoinBackground()调用的,从onCreate()调用。找到问题了吗。启动服务需要UI线程才能启动。您正在doInBackground()中调用它。因此,将其从该位置移除,并将其放在onPostExecute()中;从doInBackground()将意图返回到onPostExecute。正如drax所说,执行长时间运行的操作doInBackground()。在onPostExecute()中进行ui更新吗;
new LongOperation().execute();

 setContentView(R.layout.activity_accounts); 
setContentView(R.layout.activity_accounts); 
 new LongOperation().execute();