【发布时间】:2025-12-09 02:55:01
【问题描述】:
我的代码正在运行,但是当我启动应用程序时,它并不流畅,我想知道是否有更好的方法可以使此代码正常运行或更简洁以提高速度?欢迎任何答案。谢谢。
public class MainActivity extends AppCompatActivity {
public static final String TAG = MainActivity.class.getSimpleName();
private List<Articles> mArticlesList;
private RecyclerView mRecyclerView;
private String[] mUrl = new String[]{"https://newsapi.org/v1/articles?source=buzzfeed&apiKey=5e08eafaefd44d14ad70ceea834c16bb"
, "https://newsapi.org/v1/articles?source=the-verge&apiKey=5e08eafaefd44d14ad70ceea834c16bb"
, "https://newsapi.org/v1/articles?source=the-lad-bible&apiKey=5e08eafaefd44d14ad70ceea834c16bb"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
for (int i = 0; i < mUrl.length; i++) {
getInfos(mUrl[i]);
}
}
private void getInfos(String url) {
if (isNetworkAvailable()) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(url).build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) throws IOException {
try {
String jsonData = response.body().string();
if (response.isSuccessful()) {
Log.v(TAG, jsonData);
getMultipleUrls(jsonData);
runOnUiThread(new Runnable() {
@Override
public void run() {
getCurrentArticles(mArticlesList);
}
});
} else {
alertUserAboutError();
}
} catch (IOException | JSONException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(Call call, IOException e) {
runOnUiThread(new Runnable() {
@Override
public void run() {
}
});
alertUserAboutError();
}
});
} else {
alertUserAboutError();
}
}
private void getMultipleUrls(String jsonData) throws JSONException {
if (mArticlesList == null) {
mArticlesList = getArticleForecast(jsonData);
} else {
mArticlesList.addAll(getArticleForecast(jsonData));
}
}
private void getCurrentArticles(List<Articles> articles) {
ArticleAdapter articleAdapter = new ArticleAdapter(this, articles);
mRecyclerView.setAdapter(articleAdapter);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(layoutManager);
}
private boolean isNetworkAvailable() {
ConnectivityManager manager = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = manager.getActiveNetworkInfo();
boolean isAvailable = false;
if (networkInfo != null && networkInfo.isConnected()) {
isAvailable = true;
}
return isAvailable;
}
private void alertUserAboutError() {
AlertDialogFragment alertDialogFragment = new AlertDialogFragment();
alertDialogFragment.show(getFragmentManager(), "error_dialog");
}
private List<Articles> getArticleForecast(String jsonData) throws JSONException {
JSONObject forecast = new JSONObject(jsonData);
JSONArray articles = forecast.getJSONArray("articles");
List<Articles> listArticles = new ArrayList<>(articles.length());
for (int i = 0; i < articles.length(); i++) {
JSONObject jsonArticle = articles.getJSONObject(i);
Articles article = new Articles();
String urlImage = jsonArticle.getString("urlToImage");
article.setTitle(jsonArticle.getString("title"));
article.setDescription(jsonArticle.getString("description"));
article.setImageView(urlImage);
article.setArticleUrl(jsonArticle.getString("url"));
listArticles.add(i, article);
}
return listArticles;
}
【问题讨论】:
-
你不能在这里要求审查和改进你的代码。
-
为什么?如果我没有成功,这也是一样的吗?我应该将其命名为:我的代码缓慢吗?不明白...
-
Why that ?- 这是因为 SO 规则。你有没有费力调查一下为什么它自己很慢?您是否尝试过运行一些分析?究竟什么是慢?网络操作,还是服务器响应后的代码?如果是网络操作,那么显然您的互联网/后端很慢,您对此无能为力。此外,您的网络操作是逐个运行还是并行运行?你可以用OkHttpClient做一些事情来让它们并行运行。 -
当然我尝试了几件事我不来这里只是为了其他人做我的工作,我只是想要一些帮助,但显然这不是正确的地方。
-
忽略话题性——如果你需要关于性能的帮助,你必须告诉我们什么没有表现出来。 “它很慢”不是我们可以回答的问题。什么是慢?显示用户界面?执行一些计算?响应用户输入?完全不同的东西?我们猜不出你的意思。
标签: android performance arraylist android-asynctask android-recyclerview