我想知道我是否正确理解如何使用同步我会写下一些伪代码,它模仿我正在尝试做的事情。
public MyApp extends Application {
public Object mLock = new Object();
private final ArrayList<String> MyList = new ArrayList<String>();
public ArrayList<String> getMyList(){
return MyList;
}
}
private class MyTask extends AsyncTask<String, Void, Void> {
@Override
protected Void doInBackground(String... url) {
final ArrayList<String> BgList = MyApp.getMyList();
synchronized (mLock) {
while(somefinishcondition) {
try {
// Get some stuff from the web
BgList.add(newstuff);
mLock.notifyAll();
}
catch (IOException e) {
}
}
}
return null;
}
}
public class DisplayActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewer);
final ArrayList<String> FgList = MyApp.getMyList();
synchronized (mLock) {
while(somecondition) {
mLock.wait();
if(FgList.size()>lastSize) {
n = FgList.size();
for(i=lastSize+1; i<=n ; i++){
Display(Fglist.get(i));
}
lastSize = n;
}
}
}
}
这是我认为我正在做的事情:我正在后台运行数据收集任务,将数据放入全局列表中。每次我有新数据时,我都会通知 DisplayActivity,它会显示自上次以来的所有新数据。AsyncTask 锁定数据,直到新数据到达。DisplayActivity 等待锁定,直到通知继续并显示。这是正确的吗?这是通常的方式吗?