android - 如何一次又一次地调用线程中的方法?

标签 android

我有一个方法可以将数据从 Firebase 加载到 ArrayList 中。在此之后,我使用 ArrayList 构造 RecyclerView。我决定在另一个线程上加载数据。下面是我的代码:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_just);

     citiesRecyclerView = 
     (RecyclerView)findViewById(R.id.recyclerView);

     handler = new Handler()
     {

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);


            if(msg.what==1)
            {

                cityAdapter = new 
               CityAdapter(MainActivity.this,cities) ;
               citiesRecyclerView.setAdapter(cityAdapter);

            }
        }
    };

     t = new Thread(new Runnable() {
        @Override
        public void run() {
         //method that loads data into List.If this method was 
         //successfully done,then I send message 1 to Handler

            loadDataFromFirebase();
        }
    });

    t.start();
   //other operations below 
}

希望,一切都可以理解。代码工作正常。我的问题是我需要再次在线程中使用 loadDataFromFirebase 方法。我想再次调用 t.start() 以调用 loadDataFromFirebase 方法,但是出现错误 thread already started。我通过编写这段代码来检查:

   if(t.getState()== Thread.State.NEW)
        t.start();
    else
        someMethod(); 

else 语句在上面有效。

我的问题是: 1) loadDataFromFirebase 方法真的可以通过这种方式在另一个线程上工作吗? 2) 如果发生某些事情,如何在另一个线程中再次调用 loadDataFromFirebase 方法?我是否需要再次为 Thread 创建另一个变量?

最佳答案

自己处理所有低级线程工作不是一个好主意。

根据 Android,您可以:

  1. 使用 AsyncTask(但请注意它们有很多缺点,例如在某些情况下会泄漏上下文等),
  2. 我可以建议你进入RxJava - 这是在您的应用中使用异步工作的轻松方式。
  3. 要从 Firebase“下载”数据,您可以使用 FCM(推送通知)按需加载数据。

那你的问题呢: “多次启动一个线程是不合法的。特别是,一个线程一旦完成执行就不能重新启动。”(c) http://docs.oracle.com/javase/6/docs/api/java/lang/Thread.html#start()

关于android - 如何一次又一次地调用线程中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45551779/

相关文章:

android - 使一项 Activity 中获得的数据可供所有 Activity 使用

java - 将类的引用传递给另一个类android错误

android - 如何在 Android 设备上启用和禁用 dm verity?

java - 从另一个 fragment 返回时,主 Activity 中的 map fragment 不可见

android - 如何从Android上的给定地址获取纬度和经度?

android - 什么是 Android View 的测量状态?

android - 尝试将 Android Gradle 项目从 Groovy 迁移到 Kotlin 时出现 CacheOpenException

android - map View 的半径

android - 用于嵌套 json 的 POJO

android - EditText 不包装其内容