Cru*_*her 1 multithreading android wait
目前我有一个加载活动的按钮。
该活动中有一个 ListView ,无论出于何种原因需要相当长的时间来加载(不等待数据,数据已经在内存中)。问题是,当它呈现列表时,UI 正在等待按钮被单击的位置,并且在列表完全加载之前不会更改屏幕。
我想要的是仅在加载 Activity 后才显示列表,因此至少在他们按下按钮时会发生一些事情(响应式 UI 很重要)。
目前,我对此的解决方法是生成一个线程,等待 50 毫秒,然后为我的列表设置适配器(使用 runOnUiThread)。当然,如果在某些手机上加载 Activity 的时间超过 50 毫秒,则必须加载整个列表才能再次加载该 Activity。
当前相关代码:
@Override
public void onPostResume() {
super.onPostResume();
new Thread(new Runnable() {
@Override
public void run() {
final AdapterData data = getData();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
myAdapter = new MyAdapter(MyActivity.this, data);
lvMyList.setAdapter(myAdapter);
}
});
}
}).start();
}
Run Code Online (Sandbox Code Playgroud)
我只是在代码中更改了变量名称,但这无关紧要。这只是为了让您可以看到我的一般解决方案。
我觉得应该在活动完成创建时调用某种回调。我认为 onPostResume 等待活动完成加载,但这不起作用。还是挂了。
小智 6
你可以使用 IdleHandler
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.xxx);
final AdapterData data = getData();
IdleHandler handler = new IdleHandler() {
@Override
public boolean queueIdle() {
myAdapter = new MyAdapter(MyActivity.this, data);
lvMyList.setAdapter(myAdapter);
return false;
}
};
Looper.myQueue().addIdleHandler(handler);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2359 次 |
| 最近记录: |