后台任务缓慢且频繁崩溃(使用NewsAPI的应用)

时间:2019-01-21 04:54:12

标签: java android performance

我正在使用newsapi开发新闻应用程序。我有一个主页可以下载前15条文章,而另一个页面可以从hackernews api下载相同的内容。每次我从Android Studio运行该应用程序时,都会在填充列表视图之前显示白屏几分钟。

我尝试限制下载速度,检查了SQLite索引和StackOverflow中的其他内容,但似乎无法解决我的问题。

  • 当我进入hackernews页面并单击列表时,该应用程序将自动刷新并返回首页
  • 从模拟器运行应用程序时,它会转到hackernews而不会加载主页,或者只会崩溃
  • java.lang.IndexOutOfBoundsException:索引:1,大小:1,当单击列表视图中的最后一项时
  • 应用只会加载2篇文章,并给我一个java.io.FileNotFoundException:https://www.summarizebot.com/api/summariz ...错误。这是因为API的URL不起作用(已在浏览器中测试)

主页

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);
    ...
//START THE BACKGROUND TASK
    task = new BackgroundTask();    
        String s = task.execute("https://newsapi.org/v2/top-headlines?country=us&apiKey").get();
    ...
//POPULATE LIST WITH DATABASE CONTENT
    updateContent();


public void updateContent(){        
    ...
    if(cursor.moveToFirst()){
        homeStories.clear();
        homeLinks.clear();
    }

    if(cursor.getCount() > 0) {
        do {
            homeStories.add(cursor.getString(nameIndex));
            homeLinks.add(cursor.getString(addressIndex));
        } while (cursor.moveToNext());

    adapter.notifyDataSetChanged();
}

//BACKGROUND TASK
public class  BackgroundTask extends AsyncTask<String, Void, String> {

@Override
protected String doInBackground (String...urls){
//GET JSON AND SUMMARIES IN SINGLE FOR LOOP FOR EACH ARTICLE
        ...
        for (int i = 0; i < 16; i++) {
            JSONObject content = jsonArray.getJSONObject(i);
        ...
//ADD TO DATABASE
            database.execSQL("INSERT INTO trending (name, address) VALUES ('" + title + "','" + address + "')");

 //GET THE SUMMARY OF EACH ARTICLE             
             url = new URL("https://www.summarizebot.com/api/summarize?...         
             JSONArray j2Array = new JSONArray(s1);
                 for (int j = 0; j < j2Array.length(); j++) {
                     JSONObject object2 = j2Array.getJSONObject(j);
                        s2 += object2.getString("sentence");
                    }

  //END OF MAIN FOR LOOP
         }       

Hackernews页面

 //SAME AS ABOVE

尝试进行故障排除后,我想到了几个问题:

  • 如何加快新闻报道的后台任务?
  • 如何打开应用并启动后台下载而不会因indexOutOfBounds而崩溃?
  • 我如何赋予下载优先级到当前活动,而不是一次下载所有内容?
  • 如何跳过断开的链接并继续阅读其余文章?应用程序此时停止下载[已修复:带有Try / Catch的环绕输入流]

0 个答案:

没有答案