ProgressDialog或ProgressBar减慢了运行Android 4.1的应用程序的速度

前端之家收集整理的这篇文章主要介绍了ProgressDialog或ProgressBar减慢了运行Android 4.1的应用程序的速度前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在开发一个Android应用程序,我在其中使用AsyncTask从使用JSON的Web服务获取信息,然后将其加载到ListView中.直到这里一切正常.

我使用了一个在onPreExecute()方法中启动的ProgressDialog,并在onPostExecute()方法中被解雇.在运行2.3.3 android版本的模拟器中,所有这些操作最多需要7/8秒.我已经使用运行2.3.6的真实设备进行了测试,该应用程序具有相同的行为.

但是,当我使用运行4.1 android版本的模拟器时,此操作需要65到70秒.当我删除ProgressDialog时,Android 2.3和4.1版本的操作需要7/8秒.我已多次测试所有这些场景.

为什么会这样?我没有4.1 android版本的任何真实设备来测试它所以我想知道这是否是一个模拟器问题?我试图使用正常的进度条圈,而不是ProgressDialog,但同样的事情发生,它只需要在Android 4.1版本中花费太长时间.

任何想法可能是这种奇怪行为的原因? :S

谢谢.

dmon和James McCracken这里是我活动的代码,你可以帮我吗?

public class MainActivity extends Activity {
private TextView tvTitleList;
private ListView lvDataSearch;
private ProgressDialog dialog;
private long timeStart;
private String[] dataSearch;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tvTitleList = (TextView) findViewById(R.id.tvTitleList);
    lvDataSearch = (ListView) findViewById(R.id.lvDataSearch);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main,menu);
    return true;
}

public class ProcessUpdateList extends AsyncTaskFeed = readJSON2("http://search.twitter.com/search.json?q=hey");

        JSONObject jsonObject = new JSONObject(readTwitterFeed);
        JSONArray jsonArray = new JSONArray();

        jsonArray.put(jsonObject);
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        String json = gson.toJson(jsonObject);

        JSONObject jsonObject2 = new JSONObject(json);
        JSONObject level1 = jsonObject2.getJSONObject("nameValuePairs");
        JSONObject level2 = level1.getJSONObject("results");
        JSONArray level3 = level2.getJSONArray("values");

        dataSearch = new String[level3.length()];                   
        System.out.println(level3.length()+" resultados encontrados.");;

        for(int i=0; iFailed to download file");
        }
    } catch (Exception e) {
        return null;
    }
    return builder.toString();
}

public void updateViewList() {
    ArrayAdapter
最佳答案
我只能在模拟器中确认相同的行为,在4.1上进行测试.在我的实际设备(Galaxy S3 – 4.1)上,这不会发生.而且,它似乎只发生在不确定的进度条上.我不知道为什么会发生这种情况,但也许你会感觉更好,因为知道其他人会发生这种情况.我正在执行与您几乎相同的操作,连接到Web服务,解析xml响应,然后显示解析的响应.仅供参考,我使用ProgressBar作为ListView的android:empty函数.

编辑:跑一些测试

我测试了解析xml文件和布局中的ProgressBar我得到了这个:

解析时间:94785毫秒

所以,我改变了这一点

对此

 

并获得此解析时间:2642毫秒

注意:我的ProgressBar和ListView位于LinearLayout中,所有解析都在AsyncTask中完成.这一切都在模拟器上.真奇怪……我的猜测是模拟器实际上并没有将线程与UI分开,因此AsyncTask和ProgressBar旋转正在争夺cpu周期,而在实际的手机中它按预期运行,因为它没有被模拟.

编辑:因此,在我的WinXP上观看TaskManager之后,模拟器以7个线程运行开始.我启动我的应用程序,使用AsyncTask.THREAD_POOL_EXECUTOR运行几个AsyncTask,并且在整个过程中线程计数永远不会从7(在任务管理器中)更改.

猜你在找的Android相关文章