gpt4 book ai didi

java - Android - 在主 UI 线程中绘制 Google map 的辅助线程

转载 作者:行者123 更新时间:2023-11-30 03:15:35 25 4
gpt4 key购买 nike

所以我的主 UI 线程基本上是一个 SupportMapFragment。我有一个实用程序类,可以从本地数据库中提取一些数据,然后在 map 上绘制一些标记。

在主 UI 线程中的 map 上绘制标记的方法称为 populate();但是,这里的问题是,如果我将其包装在第二个线程中,则会出现 Not on the main thread 错误。

我的代码:

  /**
* Reacts to camera change events triggered
* by user. Mainly detecting zoom event.
*/
public void onCameraChange(CameraPosition pos)
{
// Check if zoom differs from our own
if(pos.zoom != zoom || x != pos.target.latitude || y != pos.target.longitude)
{
// Record new zoom
zoom = pos.zoom;

// Re refrence location
x = pos.target.latitude;
y = pos.target.longitude;


Thread render = new Thread()
{
public void run()
{
// Open database for reading
Database db = new Database(context);

// Fetch all atms in scope
ArrayList<Atm> atms;

// Fetch all atms within visible scope
atms = db.getAtms(getTopLeft(), getTopRight(), getBottomLeft());
db.close();

// Clear map
map.clear();

// Populate map with atms
populate(atms); // ERROR HERE

// Exit thread
return;
}
};

render.start();


// Confirm change
setChanged();
// Notify observers
notifyObservers(zoom);
}

}

即使是下面的代码也执行得非常快。问题是主 UI 仍然有点卡住,例如我将打开我的 map 并按放大键它会卡住大约 0.01 秒,直到执行此代码然后它会放大。

最佳答案

So my main UI Thread is basically a SupportMapFragment

SupportMapFragment 是一个 Java 对象。它不是线程。

The problem here is however if I wrap this inside a second Thread I get Not on the main thread error.

使用 AsyncTask。将数据库 I/O 放入 doInBackground() 并在 onPostExecute() 中填充标记。

I would be having second thread drawing something on the map of a first thread wouldnt the problem persist ?

不,因为 onPostExecute() 是在主应用程序线程上调用的。

Also AsyncTask requires to extend AsyncTask class which I can't since I'm already Extending observer class

Observer is an interface ,不是一个类。

关于java - Android - 在主 UI 线程中绘制 Google map 的辅助线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20166330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com