1

我正在尝试将功能从 iOS 应用程序移植到 Android 应用程序。iOS 视图编程框架 UIKit 提供了生命周期方法-viewDidAppear:animated:,该方法在视图控制器呈现后调用。

用于活动生命周期管理的Android 文档中写道“活动的前台生命周期发生在对 的调用onResume()和对 的调用之间onPause()”,但是当我将异步调度代码添加到活动的onResume()时,它会增加该活动的启动时间。

如何启动一个活动,然后在该活动在前台运行后执行任意工作?

编辑:我正在使用改编自 Android “控制相机”培训相机 API 指南的代码;前者写道,“正如 Android 自己的相机应用程序所做的那样,访问相机的推荐方法是在从 启动的单独线程上打开相机onCreate()。”

我在我的结尾有这个onCreate()

new Thread(new Runnable() {
    @Override
    public void run() {
        mCamera.setPreviewCallback(previewCb);
        mCamera.startPreview();
        previewing = true;
        mCamera.autoFocus(autoFocusCB);
    }
}).start();
4

3 回答 3

1

看看 AsyncTask

这就是您在 UI 线程上处理后台任务的方式。

于 2013-07-29T17:49:26.140 回答
1

一般来说,Android模式是使用或者你自己的后台线程从Activity或者AsyncTask你的后台线程开始你的异步工作(取决于你需要做的工作类型)。onCreateonResume

但是,如果您确实需要让视图处于可以渲染和测量的状态,您可以随时收听 Activity onAttachedToWindow,它在活动的窗口已创建且根视图已附加到它时调用. 请注意,这并不能保证它也已经绘制好了,所以如果你在那个方法中运行一堆工作,你仍然可以阻塞 UI 线程并使用户体验变差。因此,您仍然需要考虑在后台线程上开始您的工作。

于 2013-07-29T17:55:37.193 回答
0

你可以试试这个

第 1 步:覆盖活动中的 Tabselected 方法

@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
    // When the given tab is selected, switch to the corresponding page in
    // the ViewPager.
    try {
    if(MyEventsFragment!=null && tab.getPosition()==3)
    {
        MyEvents.fragmentChanged();
    }
    }
    catch (Exception e)
    {

    }
    mViewPager.setCurrentItem(tab.getPosition());
}

第 2 步:使用静态方法在片段中执行您想要的操作,

public static void fragmentChanged()
{
    Toast.makeText(actvity, "Fragment Changed", Toast.LENGTH_SHORT).show();
}
于 2016-01-20T13:02:47.377 回答