gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 19:10:29 25 4
gpt4 key购买 nike

我有一个方法可以将数据从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com