Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
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

Copy link
Copy link
@vincentjames501

Description

@vincentjames501
Issue body actions

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

Reactions are currently unavailable

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      Morty Proxy This is a proxified and sanitized view of the page, visit original site.