Skip to content
This repository was archived by the owner on Feb 26, 2023. It is now read-only.
This repository was archived by the owner on Feb 26, 2023. It is now read-only.

Optionally ignore @UIThread call when @EFragment is detached from Activity? #875

@vincentjames501

Description

@vincentjames501

When using @Background in conjunction with @UIThread annotations on an @EFragment, it's possible that many developers don't want to run the method annotated with the @UIThread annotation if the Fragment is no longer attached to the activity. I think it would be great to add an annotation (something like @IgnoredWhenDetached) with the following rules:

  1. Must also have the @UIThread annotation
  2. Can only be used in conjunction with @EFragment classes
  3. Simply wraps the @UIThreadmethod call in an if block like so
if(isAdded()) {
    //executable code
}

or

if(getActivity() != null) {
    //executable code
}

Here is a simple example and in my application I have dozens of things similar to this

@EFragment
public class LoaderFragment extends Fragment {

    @Background
    void longTask() {
        try {
            updateProgress(0);
            Thread.sleep(1000);
            updateProgress(50);
            Thread.sleep(1000);
            updateProgress(100);
        } catch (InterruptedException e) {
            killActivity()        
        }
    }

    @IgnoredWhenDetached
    @UiThread
    void updateProgress(int progress) {
        getActivity().setProgress(progress);
    }

    @IgnoredWhenDetached
    @UiThread
    void killActivity(int progress) {
        getActivity().finish();
    }

This essentially prevents the two @UIThread methods from getting a NPE if the Fragment were to have been destroyed at any point during the execution of the @Background method. While I realize this is something that can be easily guarded against by a simple null check, it makes the code much cleaner and is a very common use case in conjunction with Fragments. I would be more than happy to submit a pull request pending thoughts/comments about this. This could also be useful in conjunction with @Background on an @EFragment as well, but not a very common use case.

Vince

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions