@@ -134,13 +134,21 @@ public void onDownloadFailed(Throwable error) {
134134 }
135135 }
136136
137- public static void reloadUpdate (final UpdateContext updateContext ,final ReactApplicationContext mContext , final ReadableMap options , final Promise promise ) {
137+ public static void reloadUpdate (final UpdateContext updateContext , final ReactApplicationContext mContext , final ReadableMap options , final Promise promise ) {
138138 final String hash = options .getString ("hash" );
139+ restartApp (updateContext , mContext , hash , promise );
140+ }
141+
142+
143+ public static void restartApp (final UpdateContext updateContext , final ReactApplicationContext mContext , final String hash , final Promise promise ) {
139144 UiThreadUtil .runOnUiThread (new Runnable () {
140145 @ Override
141146 public void run () {
142-
143- updateContext .switchVersion (hash );
147+ // 如果提供了 hash,则切换版本
148+ if (hash != null && updateContext != null ) {
149+ updateContext .switchVersion (hash );
150+ }
151+
144152 final Context application = mContext .getApplicationContext ();
145153 JSBundleLoader loader = JSBundleLoader .createFileLoader (UpdateContext .getBundleUrl (application ));
146154 try {
@@ -166,6 +174,7 @@ public void run() {
166174 } catch (Throwable err ) {
167175 final Activity currentActivity = mContext .getCurrentActivity ();
168176 if (currentActivity == null ) {
177+ promise .reject (err );
169178 return ;
170179 }
171180 try {
@@ -203,49 +212,25 @@ public void run() {
203212
204213 // Invoke the reload method with a reason
205214 reloadMethod .invoke (reactHost , "react-native-update" );
215+ promise .resolve (true );
206216 } catch (Throwable e ) {
207217 currentActivity .runOnUiThread (new Runnable () {
208218 @ Override
209219 public void run () {
210220 currentActivity .recreate ();
211221 }
212222 });
223+ promise .resolve (true );
213224 }
214225 }
215- promise .resolve (true );
216226 }
217227 });
218228 }
219229
230+
220231 public static void restartApp (final ReactApplicationContext mContext , final Promise promise ) {
221- UiThreadUtil .runOnUiThread (new Runnable () {
222- @ Override
223- public void run () {
224- try {
225- final Context application = mContext .getApplicationContext ();
226- ReactInstanceManager instanceManager = ((ReactApplication ) application ).getReactNativeHost ().getReactInstanceManager ();
227-
228- instanceManager .recreateReactContextInBackground ();
229- promise .resolve (true );
230-
231- } catch (Throwable err ) {
232- promise .reject ("restartApp failed: " +err .getMessage ());
233- Log .e ("pushy" , "restartApp failed" , err );
234-
235- final Activity currentActivity = mContext .getCurrentActivity ();
236- if (currentActivity == null ) {
237- return ;
238- }
239- currentActivity .runOnUiThread (new Runnable () {
240- @ Override
241- public void run () {
242- currentActivity .recreate ();
243- }
244- });
245- }
246- }
247- });
248- }
232+ restartApp (null , mContext , null , promise );
233+ }
249234
250235 public static void setNeedUpdate (final UpdateContext updateContext , final ReadableMap options , final Promise promise ) {
251236 final String hash = options .getString ("hash" );
@@ -320,3 +305,4 @@ public static void getLocalHashInfo(UpdateContext updateContext, final String ha
320305 }
321306
322307}
308+
0 commit comments