【问题标题】:how to make infinite loop in android?如何在android中进行无限循环?
【发布时间】:2018-05-14 13:06:30
【问题描述】:

我想在我的代码中创建一个while(true),但是,当我运行时,我什么也没看到: 我试过AsyncTask,但我认为无限循环太重了。

public class openActivity extends AppCompatActivity {
 ArrayList<String> myArraylist = new Arraylist<> ();
 CustomAdapter myAdapter;
 ListView list;
 protected void onCreate(Bundle savedInstanceState) {
     setContentView(R.layout.myActivity);
     list = findViewById(R.id.myList);
     try {
         while (true) {
             Document doc = Jsoup.connect(myUrl).get;
             //here i get info i need
             //add that info to myArraylist
             myAdapter = new CustomAdapter(this, myArraylist);
             list.setAdapter(myAdapter);
             myAdapter.notifyDataSetChanged();
             while (myArrayList.get(0).equals(myArraylist.get(0))) {
                 Thread.sleep(900000);
             }
         }
     } catch (Exception ex) {
         ex.getLocalizeMessage()
     }
 }

【问题讨论】:

  • 这个"while (myArrayList.get(0).equals(myArraylist.get(0))) { Thread.sleep(900000); } "的目的是什么
  • 你不能在 onCreate 方法中创建它,因为它阻塞了主线程,即 UI 线程。我建议您在这里查看更多信息。 developer.android.com/guide/background
  • 我认为一个更好的问题是你为什么要这样做?不是最好的想法。
  • @AbubakkerMoallim 我需要从我的网站上获取所有信息,但我想继续只获取新帖子。所以我会说,直到arraylist的第一个元素相同,暂停抓取
  • @peshkira,是的,我知道我无法在 onCreate 中实现,我曾尝试在 Asyntask 中实现,但无法正常工作。我希望提出建议 ;)

标签: android infinite-loop


【解决方案1】:

您的循环阻塞了 UI 线程。要执行周期性任务,您应该使用ScheduledExecutorService

另外,避免在每次迭代时重新创建适配器。更新现有数据并使用DiffUtils 通知更改。

【讨论】:

    【解决方案2】:

    或者你可以试试这个:

    myAdapter = new CustomAdapter(this, myArraylist);
    list.setAdapter(myAdapter);
    getData();
    
    public void getData(){
             Document doc = Jsoup.connect(myUrl).get;
             //here i get info i need
             //add that info to myArraylist
             myAdapter.notifyDataSetChanged();
             getData()
    }
    

    【讨论】:

    • 不幸的是,如果它发布在主线程上,这将不起作用。来自文档:runnable 将在附加此处理程序的线程上运行。时基是 uptimeMillis()。在深度睡眠中花费的时间会增加执行的额外延迟。
    • 不起作用...列表视图上没有任何内容.. 无论如何谢谢
    • 问题是列表视图从一开始就已经是空的,而不是第一个结果的列表视图应该给出它
    • 是的,我试过了...不起作用...我不知道该怎么做:'(
    • 你确定“Document doc = Jsoup.connect(myUrl).get”是同步的而不是异步的
    猜你喜欢
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    相关资源
    最近更新 更多