Java 如何快速开发我的android应用程序
在我的android应用程序中,我在一个类中使用了5个API,在onCreate中逐个调用它们,但这会使我的应用程序变慢,如何优化我的代码使其变快 我的代码是这样的Java 如何快速开发我的android应用程序,java,android,json,oop,optimization,Java,Android,Json,Oop,Optimization,在我的android应用程序中,我在一个类中使用了5个API,在onCreate中逐个调用它们,但这会使我的应用程序变慢,如何优化我的代码使其变快 我的代码是这样的 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); API1(
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
API1();
API2();
API3();
API4();
API5();
}
// all the Apis are call in onCreate
public void API1() {
FetchData fetch = new FetchData(this);
fetch.response = new FetchListener() {
@Override
public void fetchFinish(String output) {
try {
JSONObject jobjOUT = new JSONObject(output);
JSONArray jsarray = jobjOUT.getJSONArray("details");
for (int i = 0; i < jsarray.length(); i++) {
JSONObject obj = jsarray.getJSONObject(i);
String a = obj.getString("abc");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
try {
fetch.execute("http://example.com/api/something.php?param=xyz");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void API2() {
// same code here
}
public void API3() {
// same code here
}
public void API4() {
// same code here
}
public void API5() {
// same code here
}
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
API1();
API2();
API3();
API4();
API5();
}
//所有API都是在onCreate中调用的
公共图书馆1({
FetchData fetch=新的FetchData(此);
fetch.response=newfetchlistener(){
@凌驾
公共void fetchFinish(字符串输出){
试一试{
JSONObject jobjOUT=新的JSONObject(输出);
JSONArray jsarray=jobjOUT.getJSONArray(“详细信息”);
对于(int i=0;i
我的问题是我是否可以同时调用所有API,而不是逐个调用它们。请给我一些建议来优化我的代码。
谢谢你你能把APIx()调用放到一个可运行的任务中吗
class MyClass {
public boolean ready = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
handler = new Handler();
final Runnable r = new Runnable() {
public void run() {
API1();
API2();
API3();
API4();
ready = true;
}
};
handler.postDelayed(r, 100);
}
}
FetchData类是某种可运行的吗?如果它是一个异步任务(看起来像),那么问题可能在于侦听器的位置。如果您在doInBackground以外的任何回调中调用它,监听器将被执行到UI线程中。即使假设所有api调用都是异步的,也会产生瓶颈。 性能损失的另一个原因是等待执行的任务太多。避免此类问题的一个好方法是在处理可运行文件时使用专用的ThreadPoolExecutor,并在asynctasks中使用executeOnExecutor(AsyncTask.ThreadPoolExecutor)方法 如果调用不是异步的,那么必须使它们异步。这意味着,在一个独立的并行线程中执行所有与ui无关的代码,这样在进行所有调用时ui不会被阻塞。看看
(我是开发人员),具体来说,是doInBackground方法(第994行)。如您所见,所有Rest调用代码、序列化代码和异步回调都在这个阶段执行。onPostExecute阶段仅执行同步侦听器(基本上与UI相关),以减少UI线程的工作负载。您可以在FetchData类中执行完全相同的操作。尝试使用
线程池执行器
参考和了解。通过使用线程池执行器
,您可以同时运行多个任务,也可以说是并行的
private void startAsyncTaskInParallel(MyAsyncTask task) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
else
task.execute();
}
你可以马上给他们打电话。Android支持多线程,请使用它。谢谢@Shubhank。但是你能告诉我如何使用多线程吗?我是编程新手。我尝试了这个处理程序,但结果是一样的。不要在主线程上做冗长的处理,否则它会阻塞你的UI。我使用Log.e(“abc”,result);在每一行之后,它都会使处理速度变慢。这仍然会在主线程上运行API调用,只是稍晚一点。它工作正常,但并不完全符合我的客户对我的期望。谢谢。这就是我要找的,让我试试这个\