如何管理ViewGroup派生类中的生命周期?

Sco*_*ith 29 android

我在一个活动中有一堆代码,显示一些外部数据的运行图.由于活动代码变得混乱,我决定提取此代码并创建一个GraphView类:

public class GraphView extends LinearLayout {
    public GraphView(Context context, AttributeSet attrs) {
        super(context, attrs);

        LayoutInflater inflater = (LayoutInflater)
                context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        inflater.inflate(R.layout.graph_view, this, true);
    }

    public void start() {
        // Perform initialization (bindings, timers, etc) here
    }

    public void stop() {
        // Unbind, destroy timers, yadda yadda
    }
        .
        .
        .
}
Run Code Online (Sandbox Code Playgroud)

把东西搬进这个新来的LinearLayout课很简单.但是有一些生命周期管理代码与创建和销毁此图所使用的计时器和事件监听器相关联(例如,如果活动暂停,我不希望在后台轮询这个事物).

从微软Windows背景的人,我有点希望找到重写onCreate()onDestroy()方法或类似的东西,但我还没有找到那种在的LinearLayout(或任何其继承成员)的任何东西.必须将所有这些初始化代码留在Activity中,然后必须将其传递到视图中,这似乎打败了将所有这些代码封装到可重用视图中的最初目的.

我最终在我的视图中添加了两个额外的公共方法:start()stop().我分别从活动onResume()onPause()方法中调用这些调用.

这似乎有效,但感觉就像我在这里使用胶带.有谁知道这通常是怎么做的?我觉得我错过了什么......

Cas*_*eyB 23

你也许能够得到一些使用了压倒一切的protected void onAttachedToWindow()protected void onDetachedFromWindow() 我从来没有尝试过,但他们可能被称为左右,当你想.


Tho*_*asW 6

我只是对此做了一个简短的实验,但看起来如果你覆盖onAttachedToWindowonDetachedFromWindow如上面的CaseyB所提到的那样覆盖

protected void onWindowVisibilityChanged(int visibility)

它应该为您提供所需的信息.

我遇到了和你一样的情况.我很惊讶没有通知机制.