Java Android应用程序使用OnCreateOptions功能表的速度越来越慢
我的应用程序在Java Android应用程序使用OnCreateOptions功能表的速度越来越慢,java,android,Java,Android,我的应用程序在列表视图中显示所有图像。速度很快,但后来我添加了oncreateoptions菜单。从那时起,该应用程序速度非常慢,只显示一幅图像。这与线程有关吗 这是我的main活动代码: public class MainActivity extends AppCompatActivity { static ArrayList<Product> arrayList; ListView lv; @Override protected void onCreate(B
列表视图中显示所有图像。速度很快,但后来我添加了oncreateoptions菜单
。从那时起,该应用程序速度非常慢,只显示一幅图像。这与线程有关吗
这是我的main活动代码
:
public class MainActivity extends AppCompatActivity {
static ArrayList<Product> arrayList;
ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
arrayList = new ArrayList<>();
lv = (ListView) findViewById(R.id.listView);
runOnUiThread(new Runnable() {
@Override
public void run() {
new ReadJSON().execute("http://10.0.3.2:5000/products/id/6");
}
});
}
class ReadJSON extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... params) {
return readURL(params[0]);
}
@Override
protected void onPostExecute(String content) {
try {
JSONObject jsonObject = new JSONObject(content);
JSONArray jsonArray = jsonObject.getJSONArray("products");
for(int i =0;i<jsonArray.length(); i++){
JSONObject productObject = jsonArray.getJSONObject(i);
arrayList.add(new Product(
productObject.getString("image"),
productObject.getString("title"),
productObject.getString("price"),
productObject.getString("description")
));
}
} catch (JSONException e) {
e.printStackTrace();
}
CustomListAdapter adapter = new CustomListAdapter(
getApplicationContext(), R.layout.custom_list_layout, arrayList
);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { // list item click opens a new detailed activity
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Product product = arrayList.get(position); // getting the model
Intent intent = new Intent(MainActivity.this, DetailActivity.class);
intent.putExtra("title", product.getName());
intent.putExtra("price", product.getPrice());
intent.putExtra("img", product.getImage());
intent.putExtra("description", product.getDescription());
intent.putExtra(ShoppingCartHelper.PRODUCT_INDEX, position);
startActivity(intent);
}
});
}
}
private static String readURL(String theUrl) {
StringBuilder content = new StringBuilder();
try {
// create a url object
URL url = new URL(theUrl);
// create a urlconnection object
URLConnection urlConnection = url.openConnection();
// wrap the urlconnection in a bufferedreader
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
String line;
// read from the urlconnection via the bufferedreader
while ((line = bufferedReader.readLine()) != null) {
content.append(line + "\n");
}
bufferedReader.close();
} catch (Exception e) {
e.printStackTrace();
}
return content.toString();
}
public static ArrayList<Product> getProduct(Resources res) {
return arrayList;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if(id == R.id.shoppingcart) {
Intent viewShoppingCartIntent = new Intent(getBaseContext(), ShoppingCartActivity.class);
startActivity(viewShoppingCartIntent);
return true;
}
return super.onOptionsItemSelected(item);
}
}
您没有在创建选项菜单中执行任何繁重的操作,因此我看不出有任何问题
但是在runOnUiThread
内部运行AsyncTask
不是一个好主意<代码>异步任务
本身已经处理哪些代码在单独的线程上运行,哪些代码在UI线程上运行
在onCreate
中调用它,如下所示:
new ReadJSON().execute("http://10.0.3.2:5000/products/all");
在runOnUiThread中运行异步任务不是一个好主意。异步任务本身已经处理哪些代码在单独的线程上运行,哪些代码在UI线程上运行。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if(id == R.id.shoppingcart) {
Intent viewShoppingCartIntent = new Intent(getBaseContext(), ShoppingCartActivity.class);
startActivity(viewShoppingCartIntent);
return true;
}
return super.onOptionsItemSelected(item);
}
}
new ReadJSON().execute("http://10.0.3.2:5000/products/all");