1
0
mirror of https://gitcode.com/gh_mirrors/re/react-native-pushy.git synced 2025-09-16 07:11:39 +08:00
Code Issues Packages Projects Releases Wiki Activity GitHub Gitee

feat: add restartApp (#488)

This commit is contained in:
陈赳赳
2025-04-08 16:00:15 +08:00
committed by GitHub
parent 7a9f579327
commit 1767fe37fa
8 changed files with 91 additions and 0 deletions

View File

@@ -176,6 +176,35 @@ public class UpdateModuleImpl {
});
}
public static void restartApp(final ReactApplicationContext mContext, Promise promise) {
UiThreadUtil.runOnUiThread(new Runnable() {
@Override
public void run() {
try {
final Context application = mContext.getApplicationContext();
ReactInstanceManager instanceManager = ((ReactApplication) application).getReactNativeHost().getReactInstanceManager();
instanceManager.recreateReactContextInBackground();
promise.resolve(true);
} catch (Throwable err) {
promise.reject("restartApp failed: "+err.getMessage());
Log.e("pushy", "restartApp failed", err);
final Activity currentActivity = mContext.getCurrentActivity();
if (currentActivity == null) {
return;
}
currentActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
currentActivity.recreate();
}
});
}
}
});
}
public static void setNeedUpdate(UpdateContext updateContext, ReadableMap options, Promise promise) {
final String hash = options.getString("hash");

View File

@@ -97,6 +97,11 @@ public class UpdateModule extends NativePushySpec {
UpdateModuleImpl.reloadUpdate(updateContext, mContext, options,promise);
}
@Override
public void restartApp(Promise promise) {
UpdateModuleImpl.restartApp(updateContext, mContext, promise);
}
@Override
public void setNeedUpdate(ReadableMap options,Promise promise) {
UpdateModuleImpl.setNeedUpdate(updateContext, options,promise);

View File

@@ -224,6 +224,29 @@ public class UpdateModule extends ReactContextBaseJavaModule {
});
}
@ReactMethod
public void restartApp(final Promise promise) {
UiThreadUtil.runOnUiThread(new Runnable() {
@Override
public void run() {
try {
final Context application = getReactApplicationContext().getApplicationContext();
ReactInstanceManager instanceManager = updateContext.getCustomReactInstanceManager();
if (instanceManager == null) {
instanceManager = ((ReactApplication) application).getReactNativeHost().getReactInstanceManager();
}
instanceManager.recreateReactContextInBackground();
promise.resolve(true);
} catch (Throwable err) {
promise.reject(err);
Log.e("pushy", "restartApp failed ", err);
}
}
});
}
@ReactMethod
public void setNeedUpdate(ReadableMap options) {
final String hash = options.getString("hash");

View File

@@ -338,6 +338,26 @@ RCT_EXPORT_METHOD(reloadUpdate:(NSDictionary *)options
}
}
RCT_EXPORT_METHOD(restartApp:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)
{
@try {
dispatch_async(dispatch_get_main_queue(), ^{
[self.bridge reload];
});
#if __has_include("RCTReloadCommand.h")
// reload 0.62+
RCTReloadCommandSetBundleURL([[self class] bundleURL]);
RCTTriggerReloadCommandListeners(@"pushy restartApp");
#endif
resolve(@true);
}
@catch (NSException *exception) {
reject(@"执行报错", exception.reason, nil);
}
}
RCT_EXPORT_METHOD(markSuccess:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)
{

View File

@@ -15,6 +15,7 @@ export interface Spec extends TurboModule {
getLocalHashInfo(hash: string): Promise<string>;
setUuid(uuid: string): Promise<void>;
reloadUpdate(options: { hash: string }): Promise<void>;
restartApp(): Promise<void>;
setNeedUpdate(options: { hash: string }): Promise<void>;
markSuccess(): Promise<void>;
downloadPatchFromPpk(options: {

View File

@@ -544,6 +544,9 @@ export class Pushy {
delete Pushy.progressHandlers[progressKey];
}
};
restartApp = async () => {
return PushyModule.restartApp();
};
}
// for international users

View File

@@ -13,6 +13,7 @@ export const defaultContext = {
dismissError: noop,
downloadUpdate: asyncNoop,
downloadAndInstallApk: asyncNoop,
restartApp: asyncNoop,
getCurrentVersionInfo: () => Promise.resolve({}),
parseTestQrCode: () => false,
currentHash: '',
@@ -33,6 +34,7 @@ export const UpdateContext = createContext<{
metaInfo?: string;
}>;
parseTestQrCode: (code: string) => boolean;
restartApp: () => Promise<void>;
currentHash: string;
packageVersion: string;
client?: Pushy | Cresc;

View File

@@ -316,6 +316,13 @@ export const UpdateProvider = ({
[parseTestPayload],
);
const restartApp = useCallback(
async () => {
return client.restartApp();
},
[client],
);
useEffect(() => {
const parseLinking = (url: string | null) => {
if (!url) {
@@ -361,6 +368,7 @@ export const UpdateProvider = ({
downloadAndInstallApk,
getCurrentVersionInfo,
parseTestQrCode,
restartApp,
}}>
{children}
</UpdateContext.Provider>