【发布时间】:2022-09-23 12:54:21
【问题描述】:
我正在创建一个应用程序,我想在其中检查活动的状态,例如活动是在前台还是在后台。这在代码中工作得很好,但是我想在后台使用服务时将活动带到前台,所以当活动将进入后台状态,我正在调用该服务,并从该服务启动活动,但在相同的意图代码不起作用后,服务在版本 10 之前工作正常。 这是我的代码。 MainActivity.Java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(android.os.Build.VERSION.SDK_INT>=29 &&
!Settings.canDrawOverlays(getApplicationContext())) {
MainActivity.this.startActivity(new
Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION));
}
}
这是扩展应用程序的 DigitalApp 类,我从中调用服务。
public class DigitalApp extends Application implements Application.ActivityLifecycleCallbacks
{
private int activityReferences = 0;
private boolean isActivityChangingConfigurations = false;
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(this);
}
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(Activity activity) {
if (++activityReferences == 1 && !isActivityChangingConfigurations) {
// App enters foreground
Toast.makeText(this,\"App is in foreground with
activity::\"+activity.getLocalClassName(),Toast.LENGTH_LONG).show();
Log.d(\"Tracking Activity Started\", activity.getLocalClassName());
Log.d(\"TAG\",\"App is in foreground\");
}
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
Toast.makeText(this,\"App enters background with
activity::\"+activity.getLocalClassName(),Toast.LENGTH_LONG).show();
isActivityChangingConfigurations = activity.isChangingConfigurations();
if (--activityReferences == 0 && !isActivityChangingConfigurations) {
// App enters background
Log.d(\"Tracking Activity Stopped\", activity.getLocalClassName());
Log.d(\"TAG\",\"App enters background\");
Intent i= null;
getApplicationContext().startService(new
Intent(getApplicationContext(),service.class));
}
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
}
这是服务类。
@Override
public void onCreate() {
super.onCreate();
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), \"IN HANDLER OF SERVICE\",
Toast.LENGTH_LONG).show();
Intent i = new Intent(getApplicationContext(), MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(i);
}, 3000);
}
我在处理程序中传递意图以在进入后台状态时启动活动。处理程序处于服务的 oncreate 方法中。我希望在进入后台状态后再次从那里启动活动。
我正在使用标记新任务,但是没有启动此标记活动,我会添加其他标记吗?
-
只是为了澄清一下,您是否尝试在延迟后被用户关闭时启动应用程序?
-
是 3 秒后我想再次打开该应用程序
-
你知道你的
Service是不是一个真正的入门?您可能想要添加一些调试日志记录,以便查看发生了什么。 -
是的,服务已启动,我收到了我在启动和创建方法时在服务中打印的 toast 消息。而且 ACTIVITY 正在 android 10 版本中重新启动,因此服务正在启动。
标签: android android-activity activity-lifecycle