До сих пор я использовал Volley, но после прохождения через библиотеку Robospice, и это преимущества по сравнению с другими сетевыми библиотеками, я начал использовать его в моем текущем проекте.Robospice жизненный цикл в фрагменте
Он работает нормально, но поскольку его жизненный цикл привязан к активности, а не фрагментам, я реализовал то же самое в этом фрагменте.
public class MainActivityFragment extends Fragment {
private SpiceManager spiceManager = new SpiceManager(JacksonSpringAndroidSpiceService.class);
private static final String KEY_LAST_REQUEST_CACHE_KEY = "lastRequestCacheKey";
private String lastRequestCacheKey;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
performRequest(mSort);
return rootView;
}
@Override
public void onSaveInstanceState(Bundle outState) {
if (!TextUtils.isEmpty(lastRequestCacheKey)) {
outState.putString(KEY_LAST_REQUEST_CACHE_KEY, lastRequestCacheKey);
}
super.onSaveInstanceState(outState);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
if (savedInstanceState != null && savedInstanceState.containsKey(KEY_LAST_REQUEST_CACHE_KEY)) {
lastRequestCacheKey = savedInstanceState.getString(KEY_LAST_REQUEST_CACHE_KEY);
spiceManager.addListenerIfPending(MovieDataResult.class, lastRequestCacheKey,
new ListMovieRequestDataListener(movieImageAdapter, getActivity(),progressDialog));
spiceManager.getFromCache(MovieDataResult.class, lastRequestCacheKey, DurationInMillis.ONE_MINUTE,
new ListMovieRequestDataListener(movieImageAdapter, getActivity(),progressDialog));
}
super.onActivityCreated(savedInstanceState);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
spiceManager.start(getActivity());
}
@Override
public void onStop() {
super.onStop();
if (spiceManager.isStarted()) {
spiceManager.shouldStop();
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
mSort = Utility.getPreferredSorting(getActivity());
setUpProgressDialog();
}
private void performRequest(String mSort) {
MovieDataRequest movieDataRequest = new MovieDataRequest(apiKey,mSort);
lastRequestCacheKey = movieDataRequest.createCacheKey();
spiceManager.execute(movieDataRequest, lastRequestCacheKey,
DurationInMillis.ONE_MINUTE, new ListMovieRequestDataListener(movieImageAdapter, getActivity(),progressDialog));
}
}
Это прекрасно работает, мне было интересно, если это следует за жизненным циклом. Как, я начинаю spicemanager onAttach() и останавливая onStop() и onRestoreInstance(), получая кешированные данные.
В принципе, это то, как он работает здесь ->
- spicemanager начинается, когда фрагмент присоединен
- затем .Execute() вызывается для запроса сети
- spicemanager разрушается OnStop()
Кроме того, это хороший подход, чтобы иметь spicemanager для каждого вида деятельности?
Создание статического spicemanager, а затем использование его в других действиях звучит великолепно, вам не придется создавать неуместные объекты. Но все же вам нужно создать различные POJO sepearte, SpiceRequest и Listeners для каждого вида деятельности, это зависит от ответа api. Я не получил вашу часть интерфейса, пожалуйста, уточните больше. – Ritesh
Конечно, вам придется создавать разные POJO, SpiceRequest и Listeners, так как каждый сетевой вызов уникален в любом случае. Для интерфейсов я имею в виду, что они полезны для передачи данных между различными частями андроида, поскольку они используют шаблон наблюдателя для этого, например, от адаптера к активности или от фрагмента к активности. См. Этот вопрос и ответ, который я опубликовал об этом: http://stackoverflow.com/questions/33131836/interface-observer-pattern-null-object-reference – Simon
Понял, это в основном создание интерфейса say infteraceA, который внедрен в Деятельность A, а затем тот же реализованный интерфейс может использоваться во всех других действиях. Это более структурировано с точки зрения обмена данными между действиями. Thankx simon. – Ritesh