gpt4 book ai didi

java - 防止繁重进程时崩溃

转载 作者:行者123 更新时间:2023-12-01 20:09:45 25 4
gpt4 key购买 nike

我正在制作一个基于 map 的应用程序,用户经常会在 map 上加载超过 10k 个多边形。唯一的问题是,向 map 添加多边形的唯一方法是在 UI 线程中,这意味着当我添加它们时,它要么卡住 5 - 10 秒,要么崩溃。

我已经准备好接受它只需要花费一些时间来加载,但是当系统努力防止崩溃甚至卡住时,有没有办法可以减慢 for 循环?我想到的一种方法是在 for 循环上设置一个短暂的延迟,但这不太理想,因为它需要花费更长的时间才能保证安全。

          protected void onPostExecute(HashMap<String, ArrayList> result){
for(String key : result.keySet()){
List<PolygonOptions> thisList = result.get(key);
for(PolygonOptions poly: thisList){
Polygon thisPoly = mMap.addPolygon(poly);
}
}
}

最佳答案

这里有一个关于我如何解决这个问题的伪代码:

private final Handler handler_render_data = new Handler ();
private int actualItemRendering;
private static final int HANDLER_RUN_DELAY = 1000;



@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// Display the message telling the user to wait
// This Linear Layout includes a text and cover all teh screen
lyt_report_progress = (LinearLayout) findViewById (R.id.lyt_report_progress);
lyt_report_progress.setVisibility (View.VISIBLE);
lyt_report_progress.requestFocus ();
lyt_report_progress.setClickable (true);

// Your code calling your async task

}

// Your callback from your async task
private void callbackHere (Data myData) {

this.localMyData = myData;

// You store your data locally and start the rendering process
actualItemRendering = 0;
handler_render_data.post (createDataFromTaskResult);
}


private Runnable createDataFromTaskResult = new Runnable () {

@Override
public void run () {

if (actualItemRendering < myData.length ()) {

// Render your data here

// Continue with the next item to render
actualItemRendering++;
handler_render_data.post (createDataFromTaskResult);

} else {
// All fields were rendered
handler.postDelayed (hideProgressBarTask, HANDLER_RUN_DELAY);
}
}
};

private Runnable hideProgressBarTask = new Runnable () {

@Override
public void run () {

lyt_report_progress.setVisibility (View.GONE);

}
};

希望对您有帮助。

关于java - 防止繁重进程时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46875583/

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