为了在应用程序的生命周期中只调用一次方法,而不是每次启动应用程序时,我应该在哪里放置这样的方法?
在onCreate()其他地方?
我有两个应用程序在平板电脑上一起工作.我注意到,如果用户退出一个应用程序并且下次打开应用程序时oncreate被调用,但是如果他们回到主页然后返回oncreate则不会被调用..我也注意到onPause,onStop,onResume永远不会被调用..我需要一些如何确保应用程序完成,如果用户打回家..
@Override
protected void onPause () {
super.onPause();
Toast.makeText(this, "Pause MED", Toast.LENGTH_SHORT).show();
finish();
}
@Override
protected void onStop () {
super.onStop();
Toast.makeText(this, "stopped MED", Toast.LENGTH_SHORT).show();
}
@Override
protected void onRestart () {
Toast.makeText(this, "Restart MED", Toast.LENGTH_SHORT).show();
}
@Override
protected void onStart () {
Toast.makeText(this, "Start MED", Toast.LENGTH_SHORT).show();
}
@Override
protected void onResume () {
super.onResume();
Toast.makeText(this, "RESUME MED", Toast.LENGTH_SHORT).show();
Intent currentIntent = this.getIntent();
Bundle extras = currentIntent.getExtras();
Run Code Online (Sandbox Code Playgroud)
或另一个选择是,如果我的其他应用程序可以检查应用程序是否打开并关闭它..
请帮忙
是否可以多次启动服务.意味着多次调用startService.我知道如果我打电话 startService,它会打电话onCreate() -> onStartCommand().在startService,它只打电话onStartCommand()没有onCreate().服务会怎样?它是否创建了多个服务实例?
我最近有一个电话采访会议,面试官问了一个非常奇怪的问题.他想知道,如果我们可以以任何方式,知道一个活动/应用程序将只是停止(的onStop)仅或被破坏(的onStop随后的onDestroy)甚至发生之前,当流量中的onPause方法.
我的意思是执行将在onPause内部,从那里你可以判断onDestroy(应用程序关闭)还是onStop(背景).
无法在任何地方找到答案.
FusedLocationProvider即使屏幕关闭,我也想让我为位置ping.为此,在我的服务中,我有一个PARTIAL_WAKE_LOCK,以保持CPU运行,并确保即使屏幕关闭,服务仍继续运行.
话虽如此,我知道Android OS会在需要内存时在后台扼杀服务/应用程序.因此,我的服务可以被杀掉.
发生这种情况时,onDestroy()在Service不能保证被调用.如果是这种情况,我如何确保WakeLock被释放?
我打电话mWakeLock.acquire();的onStartCommand,和onDestroy我打电话mWakeLock.release();
大多数内置小部件在配置更改时恢复其状态.
但是现在我想要禁用此功能.
我在onCreate()调用期间将特定视图设置为某个值,并且如果设备已旋转,则在onRestoreInstanceState()期间更改它.
我可以在onRestoreInstanceState()之后重置它,但也许有另一种方法可以做到这一点.
我为我的按钮设置了监听器:
View onCreateView(...) {
...
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//some work
}
});
...
}
Run Code Online (Sandbox Code Playgroud)
如果我使用ButterKnife,建议打电话给ButterKnife.unbind(this)在onDestroyView(){..}.我是否需要删除侦听器以避免内存泄漏?
void onDestroyView() {
...
btn.setOnClickListener(null)
}
Run Code Online (Sandbox Code Playgroud) android android-lifecycle android-fragments android-memory butterknife
我已经开始学习架构组件,但是找不到一件事。
LifecycleFragment仅创建一个新的LifecycleRegistry对象,该对象不会开始观察该片段的生命周期。
我猜想,例如,当我们将LifecycleRegistry对象作为第一参数放入LiveData.observe()时,LifecycleRegistry对象就开始监听该片段的生命周期,但是我在源代码中找不到任何证明。
问题:LifecycleRegistry对象何时以及如何开始观察片段的生命周期并刷新LifecycleRegistry.mState?
如果我没有显式调用onSaveInstanceState(),哪些是可能性,何时savedInstanceState不为null onCreate?
我看到一个选项,当系统在崩溃后重新创建我的应用程序时 - 然后savedInstanceState不是null.
还有哪些其他选择?
android android-lifecycle android-activity android-bundle android-savedstate
我已安排工作经理定期在特定时间执行任务。但它正在与其他Android版本一起使用,例如25或更低版本。当我在API 28上运行它时,如果我从最近的列表中清除应用程序,它将停止触发广播。
我在活动中安排了这样的工作经理:
OneTimeWorkRequest mywork = new OneTimeWorkRequest.Builder(MyWorker.class).setInitialDelay(15, TimeUnit.SECONDS).build();
WorkManager.getInstance().enqueue(mywork);
Run Code Online (Sandbox Code Playgroud)
这是我的工人班:
public class MyWorker extends Worker {
@NonNull
@Override
public Worker.WorkerResult doWork() {
// Do the work here
Mylogger.getInstance().printLog("MyWorr","doWork()");
//fire broadcast from here
Intent broadcastIntent = new Intent(getApplicationContext(), TimeMatchingBroadcastReceiver.class);
getApplicationContext().sendBroadcast(broadcastIntent);
CommonUtils.scheduleWorkManager();
// Indicate success or failure with your return value:
return WorkerResult.SUCCESS;
// (Returning RETRY tells WorkManager to try this task again
// later; FAILURE says not to try again.)
}
}
Run Code Online (Sandbox Code Playgroud)
即使关闭或清除所有版本的android上的最新应用程序,我也要执行工作管理器。谢谢。
android android-service android-lifecycle android-jetpack android-workmanager