我有两项活动 A 和 B。
public class A extends Activity
{
....
@Override
protected void onResume()
{
super.onResume();
if(MyStaticVarz.myFlag)
{
MyStaticVarz.myFlag= false;
SomeTask();
}
}
Run Code Online (Sandbox Code Playgroud)
MyStaticVarz.java:
public class MyStaticVarz
{
public static boolean myFLag = false;
}
Run Code Online (Sandbox Code Playgroud)
从 A 转到 B 并将 myFlag 更改为 true,如下所示:
MyStaticVarz.myFlag = true;
Run Code Online (Sandbox Code Playgroud)
并再次返回 A,但在 onResume 中 if(MyStaticVarz.myFlag) 为 false 并且未到达 SomeTask()。
从A到B就像:
Intent i = new Intent(A.this, B.class);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)
更新 SomeTask() 用于更改 A 和 B 中文本的字体大小。
myFlag 用于按需重新初始化 UI,如果字体设置发生更改,则运行 SomeTask()。
当单击 B 中的选项菜单并更改字体大小,然后转到 B 时,我看到更改,但当返回 …
我已经阅读了文档onResume(),onStart()但我仍然不清楚的一件事是在什么情况下会在没有onResume()被调用的情况下被调用? onStart()
我onResume()在onPause()方法中注册接收器并取消注册它。我的 Crashlytics 报告中可能出现奇怪的错误:
Fatal Exception: java.lang.RuntimeException
Unable to pause activity {package-here}: java.lang.IllegalArgumentException: Receiver not registered:
Caused by java.lang.IllegalArgumentException
Receiver not registered:
Run Code Online (Sandbox Code Playgroud)
它在 20k 安装中发生了 3 次(3 个用户)。
如果之前没有调用过 onResume(),是否有可能调用 onPause()?我以为不是。
android illegalargumentexception receiver activity-lifecycle android-lifecycle
因此 DataBinding 现在可以在其绑定中使用 LiveData。作为其中的一部分,我们还必须将生命周期设置为数据绑定,如下所示:
SampleLayoutBinding binding = DataBindingUtil.inflate(this, R.layout.sample_layout)
binding.setLifeCycleOwner(this)
Run Code Online (Sandbox Code Playgroud)
我的问题是在 recyclerview 中设置这个生命周期所有者的正确方法是什么?或者更恰当地说,在 recyclerview 中使用数据绑定时,我们是否需要设置 LifeCyclerOwner?
我在登录屏幕上使用了一些代码,如果用户不想登录,则该应用程序会强制关闭应用程序。如果用户选择不登录/取消,则它将调用该代码以退出应用程序。我已经成功完成了这两种方式的操作(不是同时):
finishAffinity();
System.exit(0);
Run Code Online (Sandbox Code Playgroud)
和
finish();
System.exit(0);
Run Code Online (Sandbox Code Playgroud)
然而,这两行代码似乎都在做相同的事情...该应用程序对用户关闭,但如果用户单击“概述”按钮,他们可以选择重新打开该应用程序,但仍保留在后台应用程序中以重新打开。(这只是重新启动提示以登录。)
由于没有发现功能上的差异,因此我想知道finishAffinity()和finish()方法之间的区别是什么?
奖励问题:另外,有没有办法完全关闭该应用程序,因此它也不会出现在概述按钮应用程序列表中?
我正在为我的移动应用程序使用 react-navigation,我有 2 条路线 - Home 和 Favoriti,其中 Home 是初始路线。这两个组件都有 componentDidMount。每当我从 Home 导航到 Favoriti 时,Favoriti 组件都会挂载,但是当我导航回 Home 时,它的 componentDidMount 不会执行。它仅在我第一次打开应用程序时执行,但我每次导航到它时都需要挂载它。
import { createStackNavigator, createAppContainer} from 'react-navigation';
import Home from './views/Home';
import Favoriti from './views/Favoriti';
const MainNavigator = createStackNavigator({
FavoritiRT: Favoriti,
HomeRT: Home
},
{
initialRouteName: "HomeRT"
}
);
const MyRoutes = createAppContainer(MainNavigator);
export default MyRoutes;
Run Code Online (Sandbox Code Playgroud)
没有错误显示,只是初始路由的 componentDidMount 不会在我每次导航到它时执行,但在其他路由中它会执行。
javascript navigation android-lifecycle react-native react-native-android
这是我的依赖项:
//Room and Lifecycle Libraries
kapt "androidx.room:room-compiler:2.2.0-alpha02"
kapt 'androidx.room:room-compiler:2.2.0-alpha02'
kapt "androidx.lifecycle:lifecycle-compiler:2.2.0-alpha03"
implementation "androidx.room:room-runtime:2.2.0-alpha02"
implementation 'androidx.room:room-runtime:2.2.0-alpha02'
implementation "androidx.lifecycle:lifecycle-viewmodel:2.2.0-alpha03"
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0-alpha03"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0-alpha03"
implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03"
implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2'
Run Code Online (Sandbox Code Playgroud)
如您所见,我实现了最终版本,但我无法访问 liveData 构建器。我怎样才能解决这个问题?
在我的片段中,
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
Log.e(TAG, "Inside on view created")
lifecycleScope.launchWhenResumed {
Log.e(TAG, "Inside lifecyclescope get data")
viewModel.getData().collect {
// ....
}
}
}
override fun onResume() {
Log.e(TAG, "Inside on resume")
super.onResume()
}
Run Code Online (Sandbox Code Playgroud)
以下是不同场景下的日志序列 -
当应用程序刚刚打开时 -
视图内部已创建
简历里面
在生命周期范围内获取数据
当从一个片段回到这个片段时 -
视图内部已创建
简历里面
在生命周期范围内获取数据
现在问题来了...
当应用程序从后台进入前台时 -
简历里面
如您所见,我只看到onResume()日志,但我也希望日志Inside lifecyclescope get data出现。我在这里做错了什么吗?
我在我的 android 项目中使用 Observer 和 viewLifecycleOwner 时遇到错误。它抛出“未解析的引用:viewLifecycleOwner”错误,我不知道为什么。我确认我有进口
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
Run Code Online (Sandbox Code Playgroud)
以及依赖关系:
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
Run Code Online (Sandbox Code Playgroud)
我尝试过使缓存无效/重新启动...在 GitHub 中找到的解决方案。但错误仍然存在。感谢任何可以帮助我的人。
class MainActivity : AppCompatActivity() {
private lateinit var viewModel: DrinkViewModel
// Contains all the views
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
// Use Data Binding to get reference to the views
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
binding.drinkButton.setOnClickListener {
onDrinkClicked()
}
viewModel.revenue.observe(viewLifecycleOwner, Observer { newRevenue ->
binding.revenueText.text = newRevenue.toString()
})
viewModel.drinksSold.observe(viewLifecycleOwner, Observer { newAmount -> …Run Code Online (Sandbox Code Playgroud) 我搜索了数十篇 Stackoverflow 帖子和 android 文档,但找不到答案。
根据此 SF-post的公认答案,onCreate 方法在首次创建活动时运行。它还指出,在这里应该创建视图并绑定列表数据。
然后 onStart 方法运行,但这就是问题所在。区别在哪里?如果您在 onCreate 中执行所有操作,切换活动,您的应用仍将显示相同的数据,无论您是将应用置于后台还是切换活动。
所以如果你在 onCreate 中声明视图,你在 onStart 中做什么?初始化视图到他们的 R.id.view ?获取数据?
我想 onResume 然后用于听众,因为根据这个 SF-posts 接受的答案,它是油门和刹车。
android ×7
kotlin ×3
java ×2
javascript ×1
navigation ×1
performance ×1
react-native ×1
receiver ×1
static ×1
viewmodel ×1