标签: android-lifecycle

滑动ViewPager时片段不会调用onSaveInstanceState?

我遇到了ViewPager的问题,我的ListView正在丢失它的滚动位置.

可以使用以下命令轻松存储和恢复ListView的状态:

@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) 
{
    View v = inflater.inflate(R.layout.frag_cool_things, container, false);

    AdvListView listView = (AdvListView) v.findViewById(R.id.lv0);
    listView.setOnItemClickListener( mOnListItemClicked );

    if (null != savedInstanceState)
    {
        listView.onRestoreListViewInstanceState(savedInstanceState.getParcelable("list_state"));
    }

    mListView = listView;

    return v;
}

@Override
public void onSaveInstanceState (Bundle outState) 
{
    super.onSaveInstanceState(outState);

    outState.putParcelable("list_state", mListView.onSaveListViewInstanceState());
}
Run Code Online (Sandbox Code Playgroud)

然而问题是,当正在刷片段时会被onDestroyView()调用但从不调用onSaveInstanceState (Bundle outState).

旋转屏幕,这样恢复ListView状态就好了,但刷卡我无法弄清楚如何正确恢复列表.

android android-widget android-lifecycle android-viewpager

7
推荐指数
1
解决办法
6555
查看次数

Flag Activity Clear Top会破坏目标活动而不是创建目标活动

我正在观看Intent.FLAG_ACTIVITY_CLEAR_TOP的行为.

例如,我有三个活动A,B和C现在Flow是A - > B - > C.

现在当我从C开始使用此标志时使用以下代码.

 Intent intent_to_a=new Intent(C.this,A.class);
                intent_to_home.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent_to_a);
Run Code Online (Sandbox Code Playgroud)

AFAIK,Intent.FLAG_ACTIVITY_CLEAR_TOP应该删除B并且应该恢复A.它也会以相同但奇怪的方式执行.它删除B,而不是删除A而不是创建A.还调用A的方法onDestroy.任何人都可以告诉我它是否合适?如果我不想让它破坏我该怎么办?

android android-intent android-lifecycle android-activity

7
推荐指数
1
解决办法
1万
查看次数

电池耗尽时会调用哪些Android方法?

当我的Android设备上的电池在活动和片段类(如果有的话)用什么方法在设备的"关闭"阶段被称为?

此外,如果用户当前正在查看我的应用程序中的屏幕,并且他们按住电源按钮并选择关闭,那么当电池电量耗尽并自动关闭时,调用/未调用的事件是否一致?

在onPause?

调用OnStop?

的OnDestroy?

OnDetach?

额外奖励:我是否有足够的时间将少量数据保存到Web服务器?

为了澄清当设备的电池"完全"死亡时"死亡",不再接受输入,屏幕上会弹出一个消息框/加载屏幕,显示"电源关闭".设备关闭后不久就会出现.

我只是需要足够的时间来保存手机关机之前的状态,我有一个策略来清理保存的数据,如果手机没有关闭,但我想尽可能接近手机关闭(任何超过一分钟真是无意义).

java android activity-lifecycle android-lifecycle android-activity

7
推荐指数
1
解决办法
1020
查看次数

活动转换:执行停止未恢复的活动

我正在尝试仅在棒棒糖上使用新的API进行活动转换(我使用的是紧凑版本),所以我在活动A中实现了从活动A到活动B的动画:

getWindow().setReenterTransition(null);
getWindow().setExitTransition(null);
getWindow().setAllowEnterTransitionOverlap(false);
getWindow().setAllowReturnTransitionOverlap(false);
Run Code Online (Sandbox Code Playgroud)

因为我对进入或退出此活动不感兴趣,所以我想看到的唯一动画是在活动B的共享视图中.

对于启动活动B:

ActivityCompat.startActivity(this, intent, ActivityOptionsCompat.makeSceneTransitionAnimation(this, fabButton, getString(R.string.transition_fab)).toBundle());
Run Code Online (Sandbox Code Playgroud)

并设置活动B:

getWindow().setEnterTransition(new EmptyTransition());
getWindow().setReturnTransition(null);
getWindow().setAllowEnterTransitionOverlap(false);
getWindow().setAllowReturnTransitionOverlap(false);
getWindow().getEnterTransition().addListener(listener).
Run Code Online (Sandbox Code Playgroud)

同样,我对返回转换的输入转换不感兴趣,因为内容被隐藏,直到调用了输入转换监听器方法'onTransitionEnd',因此我的转换全部基于从活动A移动/增长到活动B的共享元素当这个过渡完成后,我将把内容带入.

一切正常,但不是非常强大的设备(所以所有非Nexus)不时活动A默默崩溃:

java.lang.RuntimeException: Performing stop of activity that is not resumed: {com.transferwise.android.debug/com.transferwise.android.activity.LoggedInMainActivity}
Run Code Online (Sandbox Code Playgroud)

然后发生共享元素的转换,但是不调用侦听器(不是事件TransitionStart),因此内容不会进入.该应用程序没有崩溃,用户仍然可以按下并"再试一次",但它不是一个非常好的用户体验.

很难对它进行测试,因为它每10/20次发生一次,并且仅在某些特定设备上发生(它在Sony Xperia Z3紧凑型上发生的更多).

也:

Danieles-MacBook-Pro-2:~ danielebottillo$ adb shell dumpsys activity p | grep com.package.main.debug
  *APP* UID 10349 ProcessRecord{3b27508d 18371:com.package.main.debug/u0a349}
    dir=/data/app/com.package.main.debug-1/base.apk publicDir=/data/app/com.package.main.debug-1/base.apk data=/data/data/com.package.main.debug
    packageList={com.package.main.debug}
      - ActivityRecord{2f07bdf8 u0 com.package.main.debug/com.package.main.activity.ActivityA t1196}
      - ActivityRecord{1e871eb3 u0 com.package.main.debug/com.package.main.activity.ActivityB t1196}
      - 28ea3e28/com.android.providers.settings/.SettingsProvider->18371:com.package.main.debug/u0a349 s1/1 u0/0 +27m9s645ms
      - ReceiverList{40f2178 18371 com.package.main.debug/10349/u0 remote:39e102db}
      - ReceiverList{2e7456a6 18371 com.package.main.debug/10349/u0 remote:dde3801} …
Run Code Online (Sandbox Code Playgroud)

animation android android-lifecycle android-activity android-5.0-lollipop

7
推荐指数
1
解决办法
728
查看次数

使用START_STICKY的Android服务在杀死应用时崩溃

这是我Service从一个按钮点击调用Activity.如果我ActivityService运行时向左滑动它会崩溃.我也尝试通过放入android:process=":remote"清单在单独的过程中运行它,但它仍然是相同的.

@Override
public void onCreate(){
    super.onCreate();
    Log.d("Service", "Creating");
}

@Override
public IBinder onBind(Intent intent) {
    // TODO: Return the communication channel to the service.
    return null;
}

@Override
public int onStartCommand (Intent intent, int flags, int startId)
{
    super.onStartCommand(intent, flags, startId);

    Log.d("Started", "Service");

    type = intent.getIntExtra("Type",-1);
    mode = intent.getIntExtra("Mode",-1);
    rank = intent.getIntExtra("Rank", -1);
    latitude = intent.getDoubleExtra("Lat", -1.0);
    longitude = intent.getDoubleExtra("Long", -1.0);
    startTime = intent.getLongExtra("Start", 0);
    endTime = intent.getLongExtra("End", 0);
Run Code Online (Sandbox Code Playgroud)

我得到的错误是: …

android android-service android-lifecycle

7
推荐指数
1
解决办法
1706
查看次数

片段 - 在运行方法之前等待onCreateView()完成

我正在努力解决与a有关的一系列令人费解的事件Fragment.我正在尝试向一个片段添加一个片段Activity,然后在片段内调用一个方法来更新一些文本.但是,我发现的是该方法 onCreateView()完成之前在片段中处理,这使我留下了一个空View对象,并且我的方法失败了.这是Activity代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_log_entry_details);

    fragmentManager = getSupportFragmentManager();

    titleBarFragment = new TitleBarVerticalFragment();

    fragmentTransaction = fragmentManager.beginTransaction ();
    fragmentTransaction.add(R.id.log_entry_title_frame, titleBarFragment);
    fragmentTransaction.commit();

    titleBarFragment.updateTitleBar("Edit Log Entry", 20, false);
}
Run Code Online (Sandbox Code Playgroud)

看起来很简单.这是TitleBarVerticalFragment类:

public class TitleBarVerticalFragment extends TitleBarFragment {

    @Inject SharedVisualElements sharedVisualElements;

    View view;
    TextView titleLabel;

    public TitleBarVerticalFragment() {
        // add this line for any class that want to use any of the singleton objects
        Injector.INSTANCE.getAppComponent().inject(this);
    }

    @Override
    public View …
Run Code Online (Sandbox Code Playgroud)

android android-lifecycle android-fragments

7
推荐指数
2
解决办法
3850
查看次数

使用observable时的实时数据异常

当试图从ViewModel返回的片段中观察实时数据时,我得到了以下异常,在此之前我在这篇文章中详细阐述了错误,交换 android.arch.lifecycle:common-java8:1.0.0-beta2android.arch.lifecycle:compiler:1.0.0-beta2解决该问题,但现在我得到了以下异常

你可以在这里找到整个代码

E/AndroidRuntime: FATAL EXCEPTION: pool-1-thread-1                                                                                  
Process: com.nrs.nsnik.architecturecomponents, PID: 4114                                                                                    
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/arch/core/executor/AppToolkitTaskExecutor;                                                                                        
at android.arch.persistence.room.InvalidationTracker.addObserver(InvalidationTracker.java:241)                                                                                           
at android.arch.persistence.room.InvalidationTracker.addWeakObserver(InvalidationTracker.java:257)                                                                                        
at com.nrs.nsnik.architecturecomponents.data.NoteDao_Impl$4.compute(NoteDao_Impl.java:146)                                                                                        
at com.nrs.nsnik.architecturecomponents.data.NoteDao_Impl$4.compute(NoteDao_Impl.java:134)                                                                                        
at android.arch.lifecycle.ComputableLiveData$2.run(ComputableLiveData.java:87)                                                                                        
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)                                                                                        
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)                                                                                        
at java.lang.Thread.run(Thread.java:761)                                                                                     
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.arch.core.executor.AppToolkitTaskExecutor" on path: DexPathList[[zip file "/data/app/com.nrs.nsnik.architecturecomponents-1/base.apk", zip file "/data/app/com.nrs.nsnik.architecturecomponents-1/split_lib_dependencies_apk.apk", zip file "/data/app/com.nrs.nsnik.architecturecomponents-1/split_lib_slice_0_apk.apk", zip file "/data/app/com.nrs.nsnik.architecturecomponents-1/split_lib_slice_1_apk.apk", zip file "/data/app/com.nrs.nsnik.architecturecomponents-1/split_lib_slice_2_apk.apk", zip file "/data/app/com.nrs.nsnik.architecturecomponents-1/split_lib_slice_3_apk.apk", zip file "/data/app/com.nrs.nsnik.architecturecomponents-1/split_lib_slice_4_apk.apk", zip file "/data/app/com.nrs.nsnik.architecturecomponents-1/split_lib_slice_5_apk.apk", zip file "/data/app/com.nrs.nsnik.architecturecomponents-1/split_lib_slice_6_apk.apk", zip file "/data/app/com.nrs.nsnik.architecturecomponents-1/split_lib_slice_7_apk.apk", zip file …
Run Code Online (Sandbox Code Playgroud)

android android-lifecycle android-livedata android-architecture-components

7
推荐指数
1
解决办法
1858
查看次数

Android MVVM - 如何在ViewModel中引用Activity

MVVM架构,

这是我的观点(活动):

private MyApp app;
private MainActivityVM viewModel;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
app = (MyApp) this.getApplication();
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);

MainActivityVM.Factory factory = new MainActivityVM.Factory(app);

final MainActivityVM model = ViewModelProviders.of(this, factory)
.get(MainActivityVM.class);

viewModel = model;
binding.setVm(viewModel);
viewModel.onCreate();
Run Code Online (Sandbox Code Playgroud)

和视图模型:

public class MainActivityVM extends AndroidViewModel implements ViewModel {

    public MainActivityVM(@NonNull Application application) {
        super(application);
    }

    @Override public void onCreate() {
         model = new MyService();
         model.getData(); /* <-- how do i pass the activity here? */
    }

    @Override public …
Run Code Online (Sandbox Code Playgroud)

android mvvm viewmodel android-lifecycle

7
推荐指数
1
解决办法
5478
查看次数

LifecycleRegistry的popParentState中的ArrayIndexOutOfBoundsException

我一直面临着这种奇怪的崩溃,当将架构组件添加到片段时,崩溃随机发生我无法通过直接场景重现它我有一个navigation bottom bar控制5个片段,其中一个片段有一个实现LifecycleObserver 崩溃日志的演示者:

Fatal Exception: java.lang.ArrayIndexOutOfBoundsException: length=12; index=-1
       at java.util.ArrayList.remove(ArrayList.java:405)
       at android.arch.lifecycle.LifecycleRegistry.popParentState(LifecycleRegistry.java:194)
       at android.arch.lifecycle.LifecycleRegistry.forwardPass(LifecycleRegistry.java:293)
       at android.arch.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.java:332)
       at android.arch.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:137)
       at android.arch.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:123)
       at android.support.v4.app.Fragment.performStart(Fragment.java:2380)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1467)
       at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1759)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1827)
       at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
       at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2596)
       at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2383)
       at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2338)
       at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2245)
       at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:703)
       at android.os.Handler.handleCallback(Handler.java:739)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:158)
       at android.app.ActivityThread.main(ActivityThread.java:7225)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Run Code Online (Sandbox Code Playgroud)

更换该片段后发生崩溃,代码跟踪到我的代码从这里开始

getSupportFragmentManager()
                .beginTransaction()
                .setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out)
                .replace(R.id.flMain, fragment, tabModel.getName())
                .addToBackStack(BACK_STACK_ROOT_TAG)
                .commitAllowingStateLoss();
Run Code Online (Sandbox Code Playgroud)

这里有什么可能的问题?

android android-lifecycle android-fragments android-architecture-components android-jetpack

7
推荐指数
1
解决办法
241
查看次数

Android生命周期 - 从后台返回时,ActivityManager会终止进程 - >异常

我有一个非常无聊的问题.当我的应用程序转到后台时,有时会在LogCat显示时终止该进程:

INFO/ActivityManager(187): Low Memory: No more background processes.
INFO/ActivityManager(187): Process com.app.myapp (pid 20681) has died.
INFO/WindowManager(187): WIN DEATH: Window{40592708 com.app.myapp/app.myapp.dashboard.Dashboard paused=false}
ERROR/InputDispatcher(187): channel '408b1d40 app.myapp/app.myapp.menus.products.Promotions (server)' ~ Consumer closed input channel or an error occurred.  events=0x8
ERROR/InputDispatcher(187): channel '408b1d40 app.myapp/app.myapp.menus.products.Promotions (server)' ~ Channel is unrecoverably broken and will be disposed!
INFO/WindowManager(187): WIN DEATH: Window{408b1d40 app.myapp/app.myapp.menus.products.Promotions paused=false}
INFO/ActivityManager(187): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10100000 cmp=app.myapp/.Main } from pid 187
INFO/ActivityManager(187): Start proc app.myapp for activity app.myapp/.menus.products.Promotions: pid=20721 uid=10062 gids={3003, 1015}
Run Code Online (Sandbox Code Playgroud)

当我尝试返回应用程序时,通过任务切换器(长按回家),它会尝试返回上次打开的活动...并崩溃. …

android android-lifecycle android-activity

6
推荐指数
1
解决办法
9155
查看次数