【问题标题】:Global application class with stack of activities具有活动堆栈的全局应用程序类
【发布时间】:2011-07-13 21:45:25
【问题描述】:

源于这篇文章more efficient way of updating UI from service 我想知道我是否可以更进一步并实现以下内容。不过,我可能对我的应用程序生命周期有误解。

public class MyApplication extends Application {

    private static final String TAG = MyApplication.class.getSimpleName();
    private static Stack<MyActivity> mActivityStack = new Stack<MyActivity>();
    private static String mTopActivity = "none";

    public static void pushActivity(MyActivity activity)
    {
        mActivityStack.push(activity);
        mTopActivity = activity.getClass().getSimpleName();
        Log.i(TAG, "push::"+mTopActivity);
    }

    public static void popActivity()
    {
        Log.i(TAG, "pop::"+mTopActivity);
        mActivityStack.pop();
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        Log.w(TAG, "low memory!!!");
        Log.w(TAG, "Current::"+mTopActivity);
    }
}

public class MyActivity extends Activity
{
    private static final String TAG = MyActivity.class.getSimpleName();

    public void onCreate(Bundle last)
    {
        super.onCreate(last);
        MyApplication.pushActivity(this);
    }

    public void onDestroy()
    {
        super.onDestroy();
        MyApplication.popActivity();
    }
}

堆栈在应用程序的生命周期内是否有效?


正如 CommonsWare 所说,这没有成功。另外,从 Activity 派生不是一个好主意,因为你还必须派生 listactivity、preferenceactivity 等。显然,我认为这不会解决任何问题,它只是 android 生命周期中的一个实验。

【问题讨论】:

  • 好吧,一目了然,因为您从未真正创建过 Stack 类型的对象,因此 mActivityStack 将始终为空。运行此代码时,我希望 push/popActivity 出现空指针异常。
  • 忘记将名称编辑为 MyActivity =x。另外,忘记实例化我的堆栈 =x。虽然更新和修复。

标签: android-activity stack lifecycle android


【解决方案1】:

堆栈在应用程序的生命周期内是否有效?

当然它是无效的。您假设每个活动都以相同的顺序创建和销毁。在很多情况下它们不会出现(例如,用户按 HOME)。

无论你认为你用这种方式解决了什么问题,无论怎么想,这都不是正确的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    • 2014-12-13
    • 2021-08-25
    • 2012-11-14
    • 2015-04-10
    相关资源
    最近更新 更多