Android AppWidget 在启动时需要更长的时间来加载

问题描述 投票:0回答:1

当小部件 ID 已存储在 Android 框架中时,启动时主屏幕将使用现有的 ID 并调用 addView 来加载小部件。但从 addView 调用中,需要 14 秒才能在 Appwidget 提供程序类中获取 android.appwidget.action.APPWIDGET_ENABLED 和 android.appwidget.action.APPWIDGET_UPDATE 广播。因此,小部件在主屏幕上的加载会出现延迟。

您能帮助了解如何优化加载时间吗? 以下代码用于添加启动时的视图-

private void loadWidgets(WidgetInfo info, FrameLayout
        frameLayoutContainer, AppWidgetHostView view) {
    
    if (info.getAppWidgetInfo() != null) {
        frameLayoutContainer.removeAllViews();
        if (view.getParent() != null) {
            ((ViewGroup) view.getParent()).removeView(view);
        }
        view.setPadding(WIDGET_PADDING, WIDGET_PADDING, WIDGET_PADDING, WIDGET_PADDING);
        frameLayoutContainer.addView(view);
        frameLayoutContainer.invalidate();
        
    } else {
        frameLayoutContainer.removeAllViews();
        frameLayoutContainer.invalidate();
        frameLayoutContainer.setBackgroundColor(Color.TRANSPARENT);
    }
}
    private void bindWidget(WidgetInfo info) {
    if (info.getAppWidgetInfo() == null || info.getAppWidgetInfo().provider == null) {
        
     return;
    }
    try {
        AppWidgetManager widgetManager = AppWidgetManager
                .getInstance(requireContext().getApplicationContext());
        boolean bindWidgetStatus = widgetManager
                .bindAppWidgetIdIfAllowed(info.getWidgetId(), info.getAppWidgetInfo().provider);
        
   } catch (Exception e) {
        Log.e(TAG, "bindWidget Unexpected error: " + e.getMessage());
        e.printStackTrace();
    }
}

在重新启动的情况下,当框架中没有存储小部件ID时,它会调用bindAppWidgetIdIfAllowed。当 id 已经存在时,它会调用 addView。我的理解是广播是基于bindAppWidgetIdIfAllowed或addView发送的。 怎样才能更快的播出?

android widget android-appwidget appwidgetprovider
1个回答
0
投票

一些小部件提供程序是作为主屏幕应用程序的一部分实现的

对于这些,不要使用应用程序小部件框架。只需让它们成为您的启动器(“主屏幕”)应用程序的一部分即可。使用应用程序小部件框架不会给您带来任何好处,并且必须应对许多限制。

其中一些属于不同的应用程序。这是为汽车 Android 完成的。

Android Automotive (AAOS) 应允许您或您的汽车制造商合作伙伴修改操作系统。实际上,每种车型都定制了 AAOS。无论是谁创建 AAOS 的自定义版本,都可以调查广播在哪里受到限制,并考虑调整这些设置。

话虽这么说,请记住,很多汽车信息娱乐硬件都不是很好,类似于 Android TV 设备的 CPU 和 RAM 有限。广播受到限制的原因是为了确保平稳但有时会延迟的行为,而不是因为必须分叉大量进程并快速连续地提供 CPU/RAM 而导致大量卡顿。就我个人而言,我不会管这个。

© www.soinside.com 2019 - 2024. All rights reserved.