ui线程外的工人阶级
Posted
技术标签:
【中文标题】ui线程外的工人阶级【英文标题】:Worker Class outside ui thread 【发布时间】:2017-02-23 20:41:39 【问题描述】:我必须在应用程序的开头进行大量的 sql 操作(插入太多)。我有一个像这样的启动画面。
public class SplashScreen extends AppCompatActivity
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
...
@Override
protected void onResume()
super.onResume();
...
new SetupDataBaseWorker(this).execute();
private class SetupDataBaseWorker extends AsyncTask<Void, Void, Void>
private SqliteManager db_sql;
private Activity activity;
public SetupDataBaseWorker(Activity activity)
this.activity = activity;
db_sql = new SqliteManager(this.activity);
@Override
protected void onPreExecute()
super.onPreExecute();
...
showDialogLoading();
...
@Override
protected Void doInBackground(Void... urls)
...
db_sql.inserting();
...
return null;
@Override
protected void onPostExecute(Void result)
super.onPostExecute(result);
this.activity.startActivity(new Intent(SplashScreen.this, MainActivity.class));
this.activity.finish();
1- 总是在第一次运行时(安装后),我有 10 秒钟的空白屏幕(我想这是正在运行的脚本......),之后,我的应用程序进入 mainActivity。
2- 如果我再次运行该应用程序,它会显示 1 秒钟的空白屏幕并转到 MainActivity(甚至不显示 SplashScreen 布局)。 似乎工人阶级根本不在ui线程之外工作......我必须做什么才能做到这一点?我已经试过把这个工人放在服务中,但还是一样。
【问题讨论】:
在 onResume() 中你使用的是SetupDataBaseWorker().execute();
而不是这个new SetupDataBaseWorker(this).execute();
并且这不是db_sql = new SqliteManager(this.activity);
或者我错了吗?
showDialogLoading
该方法是否有效并且实际上显示了一个加载对话框?
各位,这是一个抽象...整个代码正在运行
【参考方案1】:
如果您在后台线程中执行所有操作,那么主线程根本不会被阻塞。
我也在 Splash 活动中做同样的事情“将数据库从资产文件夹复制到数据库”我没有得到像你这样的东西。
这是 IDE “问题”,android Studio 比 Eclipse 需要更多时间来将应用程序安装到设备中。
您只需尝试一次“将 APK 复制到设备并从设备本身安装”。
我也假设和你一样。但问题在于与我们的代码或 Android 无关的“IDE”。
【讨论】:
完美...你是对的。我做到了,瞧,完成了:)。【参考方案2】:我认为问题出在这里:
public SetupDataBaseWorker(Activity activity)
this.activity = activity;
db_sql = new SqliteManager(this.activity);
将初始化器移入
public SetupDataBaseWorker(Activity activity)
this.activity = activity;
@Override
protected Void doInBackground(Void...urls)
...
db_sql = new SqliteManager(this.activity);
db_sql.inserting();
...
return null;
【讨论】:
@MachoProgrammer,漂亮的化身猫;)以上是关于ui线程外的工人阶级的主要内容,如果未能解决你的问题,请参考以下文章