您将如何在 Utils/Helper 类中使用 AsyncTasks
Posted
技术标签:
【中文标题】您将如何在 Utils/Helper 类中使用 AsyncTasks【英文标题】:How would you use AsyncTasks in a Utils/Helper class 【发布时间】:2021-06-20 05:33:33 【问题描述】:您好,我最近才开始使用 Room DataBase,我正在观看的课程建议使用 Utils/helper 类进行所有数据库操作,但我从未被教导如何将所有 utils 静态方法正确转换为 Asynctasks在房间数据库中使用,所以我想知道是否有人对如何实现这一点有建议。干杯
(下面是我正在使用的 Utils 和 mainFragment
The Utils class
package maddo.com.aquariumfish.MainFragment;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import java.util.ArrayList;
import maddo.com.aquariumfish.Adaptors.FishAdaptor;
import maddo.com.aquariumfish.Daos.FishDao;
import maddo.com.aquariumfish.DataBases.FishDataBase;
import maddo.com.aquariumfish.FavouriteFishActivity;
import maddo.com.aquariumfish.Models.Fish;
import maddo.com.aquariumfish.R;
import maddo.com.aquariumfish.SearchActivity;
import maddo.com.aquariumfish.Utils;
public class MainFragment extends Fragment
private RecyclerView MainRecView;
private FishAdaptor fishAdaptor;
private BottomNavigationView bottomNavigationView;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
View view = inflater.inflate(R.layout.frangment_main,container,false);
initView(view);
initBottomNavView();
initRecView();
return view;
@Override
public void onResume()
super.onResume();
initRecView();
private void initRecView()
fishAdaptor = new FishAdaptor(getActivity());
MainRecView.setAdapter(fishAdaptor);
MainRecView.setLayoutManager(new GridLayoutManager(getActivity(), 2));
ArrayList<Fish> fish = Utils.getAllFish(getActivity());
if(null!= fish)
fishAdaptor.setFish(fish);
private void initBottomNavView()
bottomNavigationView.setSelectedItemId(R.id.bottomHome);
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener()
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item)
switch (item.getItemId())
case R.id.bottomHome:
break;
case R.id.bottomFavFish:
Intent FavIntent = new Intent(getActivity(), FavouriteFishActivity.class);
FavIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(FavIntent);
break;
case R.id.search:
Intent SearchIntent = new Intent(getActivity(), SearchActivity.class);
SearchIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(SearchIntent);
break;
default:
break;
return false;
);
private void initView(View view)
MainRecView = view.findViewById(R.id.mainRecView);
bottomNavigationView =view.findViewById(R.id.MainbottomNavView);
【问题讨论】:
【参考方案1】:也许您不想将每个方法转换为 AsyncTask,如果这就是您所说的。 AsyncTask 是一个并发框架,它允许您在自己的专用线程上调用 Utils 类。
如果我们想让事情尽可能简单,只需创建一个 AsyncTask 类并调用您的 Utils 方法即可。您的 Utils 方法将使用的上下文将由 AsyncTask 提供。
【讨论】:
【参考方案2】:我会建议使用协程,而不是使用 AsyncTask。它比 AsyncTask 非常简单高效。
【讨论】:
以上是关于您将如何在 Utils/Helper 类中使用 AsyncTasks的主要内容,如果未能解决你的问题,请参考以下文章