首先,我知道不应该在Android上杀死/重启应用程序.在我的用例中,我想在服务器向客户端发送特定信息的特定情况下出厂重置我的应用程序.
用户只能使用应用程序的一个实例登录服务器(即不允许多个设备).如果另一个实例获得"登录"锁定,那么该用户的所有其他实例都必须删除其数据(工厂重置),以保持一致性.
可以强制获取锁定,因为用户可能会删除应用程序并重新安装它,这将导致不同的实例ID,并且用户将无法再释放锁定.因此可以强行锁定.
由于这种力的可能性,我们需要始终检查具有锁定的具体实例.这是(几乎)对服务器的每个请求完成的.服务器可能会发送"error-lock-id".如果检测到,则客户端应用程序必须删除所有内容.
那是用例.不执行问题:
我有一个ActivityA启动Login ActivityL或应用程序的主ActivityB,具体取决于sharedPrefs字段.在启动L或B后,它自行关闭,只有L或B运行.因此,在用户已登录的情况下,B现在正在运行.
B开始C. C调用startService为IntentServiceD.导致这个堆栈:
(A)> B> C> D.
从D的onHandleIntent方法,事件被发送到ResultReceiver R.
R现在通过向用户提供一个对话框来处理该事件,在该对话框中他可以选择出厂重置应用程序(删除数据库,sharedPrefs等)
出厂重置后,我想重新启动应用程序(关闭所有活动),然后再次启动A,然后启动登录ActivityL并自行完成:
(A)> L.
Dialog的onClick方法如下所示:
@Override
public void onClick(DialogInterface dialog, int which) {
// Will call onCancelListener
MyApplication.factoryReset(); // (Deletes the database, clears sharedPrefs, etc.)
Intent i = new Intent(MyApp.getContext(), A.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
MyApp.getContext().startActivity(i);
}
Run Code Online (Sandbox Code Playgroud)
这就是MyApp班级:
public class MyApp extends Application {
private static Context context;
@Override
public void onCreate() { …Run Code Online (Sandbox Code Playgroud) 当我按下Logout按钮时,我试图让我的iPhone应用程序以编程方式重新启动.
有没有人有代码样本分享?我已经读过可以通过修改main.m文件但找不到与此相关的任何代码.
任何帮助,将不胜感激.
自 Flutter 1.12 发布以来,我的以下代码用于重新启动应用程序:
final MyAppState state = context.ancestorStateOfType(const TypeMatcher<MyAppState>()):
Run Code Online (Sandbox Code Playgroud)
警告如下:
'ancestorStateOfType' 已弃用,不应使用。请改用 findAncestorStateOfType。此功能在 v1.12.1 之后被弃用。尝试用替换来替换弃用成员的使用。
与
'TypeMatcher' 已弃用,不应使用。TypeMatcher 已被弃用,因为它不再在框架中使用(仅在弃用的方法中)。此功能在 v1.12.1 之后被弃用。尝试用替换来替换弃用成员的使用。
出于某种原因,我似乎无法弄清楚如何重构此代码以使其正常工作。有人来救吗?
我有一个应用程序可以使用OneSignal接收推送通知。我做了一个通知打开处理程序,应在单击通知时打开特定的屏幕。我如何导航到没有上下文的屏幕。或如何在应用启动时打开特定屏幕。我的代码:
OneSignal.shared.setNotificationOpenedHandler((notification) {
var notify = notification.notification.payload.additionalData;
if (notify["type"] == "message") {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => DM(user: notify['id']),
),
);
}
if (notify["type"] == "user") {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => Profileo(notify["id"]),
),
);
}
if (notify["type"] == "post") {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => ViewPost(notify["id"]),
),
);
}
});
Run Code Online (Sandbox Code Playgroud)
首次打开该应用程序时,我可以实现此目的,但是,即使我关闭了该应用程序,即使重新打开它也只能打开主页。我想那是因为上下文已更改。
请帮忙!!
我面临一个问题,当我注销一个用户(使用FirebaseAuth.signOut()方法)并与另一个用户登录时,会加载前一个用户的信息而不是新用户的信息。
我相信这是由于在 firebase 的缓存中仍然可以访问这些信息造成的。
有没有办法强制 firebase 清除其本地缓存?
干杯!
我有一个设置屏幕,当我更改FontFamily时,它需要重新启动应用程序才能更改所有应用程序字体,并且它会在应用程序关闭后重新启动,但我想用按钮重新启动应用程序而不是关闭应用程序。有什么办法可以做到这一点吗?
我有一个带有登录屏幕的应用程序,成功登录后会转到主屏幕。我使用下面的代码来替换小部件并启动一个新的导航堆栈:
Navigator.pushReplacement(
context,
CupertinoPageRoute(
builder: (context) => HomeScreen(),
),
);
Run Code Online (Sandbox Code Playgroud)
主屏幕是CupertinoTabScaffold2 CupertinoTabViews。
第二个CupertinoTabView包含一个带有注销按钮的小部件。
成功注销后,我想删除 HomeWidget,然后转到 LoginScreen。
使用
Navigator.pushReplacement(
context,
CupertinoPageRoute(
builder: (context) => LoginScreen(),
),
);
Run Code Online (Sandbox Code Playgroud)
在第二个内的 Widget 中,CupertinoTabView仅重置其导航,并且 LoginScreen 出现在第二个内CupertinoTabView。
我想要的是一些代码来删除我的主屏幕并使用登录屏幕启动新的导航堆栈。
在我的 Flutter 项目中,为了提高性能,我创建了许多const小部件,这些小部件在其父小部件重建时不会重建。
但是,在用户更改应用程序的语言后,我需要重建整个应用程序以应用文本更改。
有没有办法强制应用程序完全重建?谢谢,任何建议将不胜感激。