我有一个 UseCase 和远程存储库,它们在循环中返回 Flow,并且我在 ViewModel 中收集 UseCase 的结果,如下所示:
viewModelScope.launch {
useCase.updatePeriodically().collect { result ->
when (result.status) {
Result.Status.ERROR -> {
errorModel.value = result.errorModel
}
Result.Status.SUCCESS -> {
items.value = result.data
}
Result.Status.LOADING -> {
loading.value = true
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是当应用程序处于后台(最小化)时流程继续工作。那么我可以在应用程序在后台时暂停它并在应用程序返回前台时恢复它吗?
而且我也不想观察我视图中的数据(片段或活动)。
我想应用像HTC手机那样的活动转换:当你开始一个新的活动时,从右到左有一个幻灯片,但是当你按下后退按钮返回上一个活动时,会有一个幻灯片到右边的动画.
我已经overridePendingTransition在onResume我的活动中用来模拟从右到左动画的幻灯片,但是当我按下后退按钮时,执行相同的动画是错误的(从结果的角度来看).
因此,我想问一下如何为Activity创建不同的动画,一个用于创建它,另一个用于用户按回键.
非常感谢!
我有一个非常简单的偏好设置,其中将PreferenceFragment添加到Activity。这Activity也是一个OnSharedPreferenceChangeListener,因为每当该首选项更新时,我都想更新该首选项的摘要。这是Activity:
public class PrefsActivity extends Activity implements OnSharedPreferenceChangeListener {
private static final String PREF_KEY = "key goes here";
private PrefsFragment pf;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pf = new PrefsFragment();
getFragmentManager().beginTransaction().replace(android.R.id.content, pf).commit();
// pf.getPreferenceScreen() throws a NullPointerException here
}
@Override
protected void onPause() {
super.onPause();
PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener(this);
}
@Override
protected void onResume() {
super.onResume();
updateSummary();
PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if (key.equals(PREF_KEY)) {
updateSummary(); …Run Code Online (Sandbox Code Playgroud) 我的应用程序包含几个片段.到目前为止,我已将它们的引用存储在自定义的Application对象中,但我开始认为我做错了.
当我意识到我的片段对mActivity的所有引用在方向改变后变为null时,我的问题就开始了.因此,当我在方向更改后调用getActivity()时,会抛出NullPointerException.我已经检查过我的片段的onAttach()在调用getActivity()之前被调用,但它仍然返回null.
以下是我的MainActivity的剥离版本,它是我的应用程序中唯一的活动.
public class MainActivity extends BaseActivity implements OnItemClickListener,
OnBackStackChangedListener, OnSlidingMenuActionListener {
private ListView mSlidingMenuListView;
private SlidingMenu mSlidingMenu;
private boolean mMenuFragmentVisible;
private boolean mContentFragmentVisible;
private boolean mQuickAccessFragmentVisible;
private FragmentManager mManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*
* Boolean variables indicating which of the 3 fragment slots are visible at a given time
*/
mMenuFragmentVisible = findViewById(R.id.menuFragment) != null;
mContentFragmentVisible = findViewById(R.id.contentFragment) != null;
mQuickAccessFragmentVisible = findViewById(R.id.quickAccessFragment) != null;
if(!savedInstanceState != null) {
if(!mMenuFragmentVisible && mContentFragmentVisible) { …Run Code Online (Sandbox Code Playgroud) 第二次运行应用程序时,不会调用Application Class的onCreate.第一次是它.这可以通过使用Android Studio创建新应用程序,然后添加最小单例应用程序类来重现:
package com.whatever.test;
import android.app.Application;
import android.content.Context;
import android.util.Log;
public class MyApp extends Application {
private static MyApp singleton;
public static MyApp getInstance(Context context) {
Log.i("MyApp","---------->getinstance");
return singleton;
}
@Override
public void onCreate()
{
super.onCreate();
singleton = this;
Log.i("MyApp","---------->act oncreate");
}
}
Run Code Online (Sandbox Code Playgroud)
并在onCreate中添加活动:
MyApp myApp = MyApp.getInstance(this);
Log.i("MainActivity", "-------->onCreate");
Run Code Online (Sandbox Code Playgroud)
并在onDestroy中:
@Override
public void onDestroy()
{
super.onDestroy();
Log.i("MainActivity", "-->onDestroy");
}
Run Code Online (Sandbox Code Playgroud)
Manifest.xml包含:
android:name=".MyApp"
Run Code Online (Sandbox Code Playgroud)
我按下活动上的后退按钮并看到onDestroy被调用,但这显然不足以删除Application类.如果我使用手机的应用程序管理器终止应用程序并重新运行,我将再次看到App onCreate日志(但仅用于一次运行).
删除最后一个活动时,不应该销毁此类吗?这是我的假设.当然我读过这样的人说当应用程序运行时这个类可以被销毁,所以你必须在应用程序生命周期中处理重新加载任何状态,但没有任何反映我的场景.
注意:在物理手机上测试(Galaxy S3)
我似乎无法使用搜索引擎找到这个答案,但是在托管片段的活动的情况下,当调用onPostResume方法的活动时,我假设已经调用任何附加的片段onResume方法.谁可以确认?
我仍然没有得到Application(不是Activity)生命周期的方式,
在启动GUI时调用Application的onCreate方法非常简单.
但是,它是在以下任何一种情况下开始的吗?
申请流程能保持多久?
现在我有一个问题,我看到应用程序(进程)在关闭/终止应用程序后重新启动.然而,没有任何实现,所以有这种行为.
android application-lifecycle android-service android-lifecycle
我有一段代码,我只想在第一次调用特定的OnCreate()方法时运行(每个应用程序会话),而不是每次创建活动时.有没有办法在Android中执行此操作?
我已经在Android架构组件上工作了一段时间,这是在Google IO 2017中引入的
他们的一个组件是为了避免配置更改它们提供的问题ViewModel和AndroidViewModel类
根据文件:
AndroidViewModel:应用程序上下文感知ViewModel
ViewModel:ViewModels也可以用作Activity的不同片段之间的通信层.每个片段可以ViewModel通过其Activity 获取使用相同的键
但是对于AndoirdViewModel场景,我可以通过将类扩展到Application类来获取应用程序上下文
Android开发中它们之间的实际区别是什么?因为两者仅附加到Activity/Fragment生命周期.
java android android-lifecycle android-architecture-components
如果我在主活动中启动服务,然后退出main并再次创建main,是否会将新服务实例放在其位置?或者它是同一个实例?还是会有两个例子?我需要知道,因为在我的服务中,每次创建新服务时我都会创建一个唯一的ID.
android android-service android-lifecycle android-background