55import android .content .Context ;
66import android .content .Intent ;
77import android .os .Bundle ;
8+ import android .util .Log ;
89import android .view .View ;
910
1011import androidx .fragment .app .Fragment ;
1516
1617public class ActivityTaskHelper {
1718
18- public void init (Application app ) {
19- app .registerActivityLifecycleCallbacks (new ActivityLifecycleAdapter () );
19+ public static void init (Application app ) {
20+ app .registerActivityLifecycleCallbacks (new ActivityTaskHelper (). activityLifecycleImpl );
2021 }
2122
22- public static String getSimpleName (Object obj ){
23- return obj .getClass ().getSimpleName () + "@" + Integer .toHexString (obj .hashCode ());
23+ private ActivityLifecycleImpl activityLifecycleImpl = new ActivityLifecycleImpl ();
24+
25+ private void handleFragment (Fragment fragment ) {
26+ if (fragment == null || fragment .getActivity () == null ) {
27+ Log .e ("ActivityTaskHelper" , "handleFragment null" );
28+ return ;
29+ }
30+ sendBroadcast (fragment .getActivity (), fragment );
31+ }
32+
33+ private void handleFragment (Fragment fragment , Context context ) {
34+ if (fragment == null || !(context instanceof Activity )) {
35+ Log .e ("ActivityTaskHelper" , "handleFragment null" );
36+ return ;
37+ }
38+ sendBroadcast ((Activity ) context , fragment );
39+ }
40+
41+ private void handleActivity (Activity activity ) {
42+ if (activity == null ) {
43+ Log .e ("ActivityTaskHelper" , "handleActivity null" );
44+ return ;
45+ }
46+ sendBroadcast (activity , null );
2447 }
2548
26- private void sendBroadcast (String lifecycle , Activity activity , Fragment fragment ) {
49+ private void sendBroadcast (Activity activity , Fragment fragment ) {
50+ String lifecycle = Thread .currentThread ().getStackTrace ()[5 ].getMethodName ();
2751 String packageName = "cc.rome753.activitytask" ;
2852 Intent intent = new Intent (packageName + ".ACTION_UPDATE_LIFECYCLE" );
2953 intent .setPackage (packageName );
3054 intent .putExtra ("lifecycle" , lifecycle );
31- intent .putExtra ("task" , activity .getPackageName () + "@" + Integer .toHexString (activity .getTaskId ()));
55+ intent .putExtra ("task" , activity .getPackageName () + "@0x " + Integer .toHexString (activity .getTaskId ()));
3256 intent .putExtra ("activity" , getSimpleName (activity ));
3357 if (fragment != null ) {
3458 intent .putStringArrayListExtra ("fragments" , getAllFragments (fragment ));
@@ -45,135 +69,117 @@ private ArrayList<String> getAllFragments(Fragment fragment){
4569 return res ;
4670 }
4771
48- private class ActivityLifecycleAdapter implements Application .ActivityLifecycleCallbacks {
72+ private String getSimpleName (Object obj ){
73+ return obj .getClass ().getSimpleName () + "@0x" + Integer .toHexString (obj .hashCode ());
74+ }
75+
76+ private class ActivityLifecycleImpl implements Application .ActivityLifecycleCallbacks {
4977
5078 @ Override
5179 public void onActivityCreated (Activity activity , Bundle savedInstanceState ) {
5280 if (activity instanceof FragmentActivity ){
53- ((FragmentActivity ) activity ).getSupportFragmentManager ().registerFragmentLifecycleCallbacks (new FragmentLifecycleAdapter (), true );
81+ ((FragmentActivity ) activity ).getSupportFragmentManager ().registerFragmentLifecycleCallbacks (new FragmentLifecycleImpl (), true );
5482 }
55- String method = Thread .currentThread ().getStackTrace ()[2 ].getMethodName ();
56- sendBroadcast (method , activity , null );
83+ handleActivity (activity );
5784 }
5885
5986 @ Override
6087 public void onActivityStarted (Activity activity ) {
61- String method = Thread .currentThread ().getStackTrace ()[2 ].getMethodName ();
62- sendBroadcast (method , activity , null );
88+ handleActivity (activity );
6389 }
6490
6591 @ Override
6692 public void onActivityResumed (Activity activity ) {
67- String method = Thread .currentThread ().getStackTrace ()[2 ].getMethodName ();
68- sendBroadcast (method , activity , null );
93+ handleActivity (activity );
6994 }
7095
7196 @ Override
7297 public void onActivityPaused (Activity activity ) {
73- String method = Thread .currentThread ().getStackTrace ()[2 ].getMethodName ();
74- sendBroadcast (method , activity , null );
98+ handleActivity (activity );
7599 }
76100
77101 @ Override
78102 public void onActivityStopped (Activity activity ) {
79- String method = Thread .currentThread ().getStackTrace ()[2 ].getMethodName ();
80- sendBroadcast (method , activity , null );
103+ handleActivity (activity );
81104 }
82105
83106 @ Override
84107 public void onActivitySaveInstanceState (Activity activity , Bundle outState ) {
85- String method = Thread .currentThread ().getStackTrace ()[2 ].getMethodName ();
86- sendBroadcast (method , activity , null );
108+ handleActivity (activity );
87109 }
88110
89111 @ Override
90112 public void onActivityDestroyed (Activity activity ) {
91- String method = Thread .currentThread ().getStackTrace ()[2 ].getMethodName ();
92- sendBroadcast (method , activity , null );
113+ handleActivity (activity );
93114 }
94115 }
95116
96-
97- private class FragmentLifecycleAdapter extends FragmentManager .FragmentLifecycleCallbacks {
117+ private class FragmentLifecycleImpl extends FragmentManager .FragmentLifecycleCallbacks {
98118
99119 @ Override
100120 public void onFragmentPreAttached (FragmentManager fm , Fragment f , Context context ) {
101- String method = Thread .currentThread ().getStackTrace ()[2 ].getMethodName ();
102- sendBroadcast (method , (Activity ) context , f );
121+ handleFragment (f , context );
103122 }
104123
105124 @ Override
106125 public void onFragmentAttached (FragmentManager fm , Fragment f , Context context ) {
107- String method = Thread .currentThread ().getStackTrace ()[2 ].getMethodName ();
108- sendBroadcast (method , (Activity ) context , f );
126+ handleFragment (f , context );
109127 }
110128
111129 @ Override
112130 public void onFragmentCreated (FragmentManager fm , Fragment f , Bundle savedInstanceState ) {
113- String method = Thread .currentThread ().getStackTrace ()[2 ].getMethodName ();
114- sendBroadcast (method , f .getActivity (), f );
131+ handleFragment (f );
115132 }
116133
117134 @ Override
118135 public void onFragmentActivityCreated (FragmentManager fm , Fragment f , Bundle savedInstanceState ) {
119- String method = Thread .currentThread ().getStackTrace ()[2 ].getMethodName ();
120- sendBroadcast (method , f .getActivity (), f );
136+ handleFragment (f );
121137 }
122138
123139 @ Override
124140 public void onFragmentViewCreated (FragmentManager fm , Fragment f , View v , Bundle savedInstanceState ) {
125- String method = Thread .currentThread ().getStackTrace ()[2 ].getMethodName ();
126- sendBroadcast (method , f .getActivity (), f );
141+ handleFragment (f );
127142 }
128143
129144 @ Override
130145 public void onFragmentStarted (FragmentManager fm , Fragment f ) {
131- String method = Thread .currentThread ().getStackTrace ()[2 ].getMethodName ();
132- sendBroadcast (method , f .getActivity (), f );
146+ handleFragment (f );
133147 }
134148
135149 @ Override
136150 public void onFragmentResumed (FragmentManager fm , Fragment f ) {
137- String method = Thread .currentThread ().getStackTrace ()[2 ].getMethodName ();
138- sendBroadcast (method , f .getActivity (), f );
151+ handleFragment (f );
139152 }
140153
141154 @ Override
142155 public void onFragmentPaused (FragmentManager fm , Fragment f ) {
143- String method = Thread .currentThread ().getStackTrace ()[2 ].getMethodName ();
144- sendBroadcast (method , f .getActivity (), f );
156+ handleFragment (f );
145157 }
146158
147159 @ Override
148160 public void onFragmentStopped (FragmentManager fm , Fragment f ) {
149- String method = Thread .currentThread ().getStackTrace ()[2 ].getMethodName ();
150- sendBroadcast (method , f .getActivity (), f );
161+ handleFragment (f );
151162 }
152163
153164 @ Override
154165 public void onFragmentSaveInstanceState (FragmentManager fm , Fragment f , Bundle outState ) {
155- String method = Thread .currentThread ().getStackTrace ()[2 ].getMethodName ();
156- sendBroadcast (method , f .getActivity (), f );
166+ handleFragment (f );
157167 }
158168
159169 @ Override
160170 public void onFragmentViewDestroyed (FragmentManager fm , Fragment f ) {
161- String method = Thread .currentThread ().getStackTrace ()[2 ].getMethodName ();
162- sendBroadcast (method , f .getActivity (), f );
171+ handleFragment (f );
163172 }
164173
165174 @ Override
166175 public void onFragmentDestroyed (FragmentManager fm , Fragment f ) {
167- String method = Thread .currentThread ().getStackTrace ()[2 ].getMethodName ();
168- sendBroadcast (method , f .getActivity (), f );
176+ handleFragment (f );
169177 }
170178
171179 @ Override
172180 public void onFragmentDetached (FragmentManager fm , Fragment f ) {
173- String method = Thread .currentThread ().getStackTrace ()[2 ].getMethodName ();
174- sendBroadcast (method , f .getActivity (), f );
181+ handleFragment (f );
175182 }
176-
177183 }
178184
179185}
0 commit comments