Android Widget 在更新期间显示奇怪的图像

2023-12-03

我这里有一个奇怪的... 我有一台配备 Nextel 的 Motorola i1,运行 Android 1.5

我有一个安卓小部件。 当我开始运行更新此小部件的服务时,我看到来自另一个小部件的图像(启动 DC Contact)

它在我的小部件的位置显示此图像,但是当我的小部件的“更新”完成时,它会被我的小部件的布局替换。

就好像有一个小部件图像的缓存,它显示从那里开始的内容,直到我的小部件更新完成。

如果我的更新需要很长时间,那么用户可以看到这个奇怪的图像 2-3 秒。

public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {
        Log.d(TAG, "Enter onUpdate");
        final int N = appWidgetIds.length;

        for (int i = 0; i < N; i++) {
            int widgetId = appWidgetIds[i];
            RemoteViews views = new RemoteViews(context.getPackageName(),
                    R.layout.widget_initial_layout);
            Intent intent = new Intent(context, MainActivity.class);
            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
                    intent, 0);
            views.setOnClickPendingIntent(R.id.WidgetLayout, pendingIntent);
            views.setTextViewText(R.id.NEWCountTextView, Integer.toString(NEWC));
            views.setTextViewText(R.id.ACKCountTextView, Integer.toString(ACKC));
            views.setTextViewText(R.id.PKUCountTextView, Integer.toString(PKUC));
            views.setTextViewText(R.id.PODCountTextView, Integer.toString(PODC));
            if (errorMessage.contentEquals("")) {
                errorMessage = (new Date()).toString();
                views.setTextColor(R.id.LastUpdatedTextView, Color.BLACK);
            } else {
                views.setTextColor(R.id.LastUpdatedTextView, Color.RED);
            }
            views.setTextViewText(R.id.LastUpdatedTextView, errorMessage);
            appWidgetManager.updateAppWidget(widgetId, views);
        }
        Log.d(TAG, "Exit onUpdate");
    }

public void onReceive(Context context, Intent intent) {
    Log.d(TAG, "Enter onReceive");
    String action = intent.getAction();
    if (action.contentEquals("android.appwidget.action.APPWIDGET_UPDATE")) {
        Bundle extras = intent.getExtras();
        if (extras != null) {
            NEWC = extras.getInt("NEWCOUNT");
            ACKC = extras.getInt("ACKCOUNT");
            PKUC = extras.getInt("PKUCOUNT");
            PODC = extras.getInt("PODCOUNT");
            errorMessage = extras.getString("ERRORMESSAGE");
        }
    }

super.onReceive(上下文,意图); Log.d(TAG, "接收时退出"); } 这是布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/WidgetLayout" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content"
    android:gravity="top"
    android:orientation="vertical"
    android:background="@drawable/bg"
    >

    <TextView 
        android:text="ORDERS" 
        android:id="@+id/TextView01" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:textSize="25dip"
        android:gravity="top|center"
        android:textColor="#ffff00"
        android:textStyle="bold"
        />

    <TextView 
        android:text="" 
        android:id="@+id/TextView01" 
        android:layout_width="fill_parent" 
        android:layout_height="6dip"
        android:gravity="top|center"
        android:background="#0000ff"
        />

    <LinearLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/LinearLayout02" 
        android:layout_height="wrap_content" 
        android:layout_width="fill_parent"
        android:gravity="top|center"
        android:orientation="horizontal"        
        >
        <LinearLayout 
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/CountsLinearLayout" 
            android:layout_height="fill_parent" 
            android:layout_width="wrap_content"
            android:gravity="top"
            android:orientation="vertical"
            >
            <TextView 
                android:text="NEW" 
                android:id="@+id/TextView11" 
                android:layout_width="75dip" 
                android:layout_height="wrap_content"
                android:textSize="25dip"
                android:gravity="center"
                android:textColor="#000000"
                android:textStyle="bold"

                />
            <TextView 
                android:text="" 
                android:id="@+id/NEWCountTextView" 
                android:layout_width="75dip" 
                android:layout_height="wrap_content"
                android:textSize="25dip"
                android:gravity="center"
                android:textColor="#000000"
                android:textStyle="bold"
                />
        </LinearLayout>

        <LinearLayout 
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/LinearLayout04" 
            android:layout_height="fill_parent" 
            android:layout_width="wrap_content"
            android:gravity="top"
            android:orientation="vertical"
            >
            <TextView 
                android:text="ACK" 
                android:id="@+id/TextView21" 
                android:layout_width="75dip" 
                android:layout_height="wrap_content"
                android:textSize="25dip"
                android:gravity="center"
                android:textColor="#000000"
                android:textStyle="bold"

                />
            <TextView 
                android:text="" 
                android:id="@+id/ACKCountTextView" 
                android:layout_width="75dip" 
                android:layout_height="wrap_content"
                android:textSize="25dip"
                android:gravity="center"
                android:textColor="#000000"
                android:textStyle="bold"
                />
        </LinearLayout>

        <LinearLayout 
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/LinearLayout05" 
            android:layout_height="fill_parent" 
            android:layout_width="wrap_content"
            android:gravity="top"
            android:orientation="vertical"
            >
            <TextView 
                android:text="PKU" 
                android:id="@+id/TextView31" 
                android:layout_width="75dip" 
                android:layout_height="wrap_content"
                android:textSize="25dip"
                android:gravity="center"
                android:textColor="#000000"
                android:textStyle="bold"
                />
            <TextView 
                android:text="" 
                android:id="@+id/PKUCountTextView" 
                android:layout_width="75dip" 
                android:layout_height="wrap_content"
                android:textSize="25dip"
                android:gravity="center"
                android:textColor="#000000"
                android:textStyle="bold"
                />
        </LinearLayout>

        <LinearLayout 
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/LinearLayout06" 
            android:layout_height="fill_parent" 
            android:layout_width="wrap_content"
            android:gravity="top"
            android:orientation="vertical"
            >
            <TextView 
                android:text="POD" 
                android:id="@+id/TextView41" 
                android:layout_width="75dip" 
                android:layout_height="wrap_content"
                android:textSize="25dip"
                android:gravity="center"
                android:textColor="#000000"
                android:textStyle="bold"
                />
            <TextView 
                android:text="" 
                android:id="@+id/PODCountTextView" 
                android:layout_width="75dip" 
                android:layout_height="wrap_content"
                android:textSize="25dip"
                android:gravity="center"
                android:textColor="#000000"
                android:textStyle="bold"
                />
        </LinearLayout>


    </LinearLayout>

    <TextView 
        android:text="" 
        android:id="@+id/TextView01" 
        android:layout_width="fill_parent" 
        android:layout_height="6dip"
        android:gravity="bottom|center"
        android:background="#0000ff"
        />

    <TextView 
        android:text="" 
        android:id="@+id/LastUpdatedTextView" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:textSize="15dip"
        android:gravity="center"
        android:textColor="#000000"
        android:textStyle="bold"
        />                  
</LinearLayout>

你见过这样的事情吗?

thanks


我的小部件中遇到了与您描述的完全相同的问题,并搜索了大量解决方案,但找不到任何解决方案。我最终所做的是某种在我的情况下似乎效果很好的解决方法。我所做的如下,我启动了一个处理更新的服务,然后自行终止,而不是直接从 onUpdate() 方法更新小部件。这在模拟器和更新期间小部件卡住的设备上解决了这个问题。 这是示例代码:

AppWidgetProvider:

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    context.startService(new Intent(context, WidgetService.class));
}

服务:

@Override
public void onStart(Intent intent, int startId) {
    started(intent);
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    started(intent);
    return START_STICKY;
}


private void started(Intent intent) {
    //update here the widgets
    Context context = getApplicationContext();
    updateWidgets(context);
    stopSelf();//killing the service
}

private void updateWidgets(Context context) {
    AppWidgetManager appmanager = AppWidgetManager.getInstance(context);
    ComponentName cmpName = new ComponentName(context, widgetClass);
    int[] widgetIds = appmanager.getAppWidgetIds(cmpName);
    RemoteViews rView = new RemoteViews(context.getPackageName(), layoutId);
    for (int wid : widgetIds) {
        //all updates here
        rView.setTextViewText(tvId, desc);
        appmanager.updateAppWidget(wid, rView);
    }
}

请注意为什么此解决方法可以解决问题,但好处是它确实解决了问题 希望这可以帮助

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Widget 在更新期间显示奇怪的图像 的相关文章

  • 我们如何从 Android 通知中提取 bigpicturestyle 图像?

    我有一个通知侦听器服务 可以读取来自其他应用程序的通知 经用户许可 并提取所有数据 能够访问除通知展开视图中显示的图像之外的所有内容 我也在阅读 EXTRA PICTURE 意图值 if extras containsKey Notific
  • 使用 NEON 内在函数除以浮点数

    我当时正在处理四个像素的图像 这是在armv7对于 Android 应用程序 我想分一个float32x4 t向量由另一个向量组成 但其中的数字与大约不同0 7 to 3 85 在我看来 除法的唯一方法是使用右移 但这是针对一个数字2 n
  • 视图无法解析为类型

    这里的视图似乎有什么问题 我该如何解决它 错误 视图无法解析为类型 public void onItemClick AdapterView
  • 在Android中使用RxJava2插入SQLiteDatabase

    我在学习RxJava2在安卓中 谁能解释一下我们如何使用将数据插入 SQLiteDatabaseRxJava2 这是我尝试使用的代码示例 但它将数据插入数据库六次 单击时 getCompletableObservable subscribe
  • Android版本App更新代码

    我读到如果我们想更新Google Play中的应用程序 版本代码应该高于以前的apk文件 我有一个版本代码为 20 且版本名称为 1 0 的应用程序 那么要更新app 应该如何增加版本号呢 应该增加10吗 或者仅仅 1 就足够了 即版本代码
  • Android Studio Beta 频道、Android Studio Canary 频道、Android Studio Dev 频道有什么区别? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我是 android 新手 想知道要安装哪个 studio Android Studio Beta 频道 Android Studio Ca
  • 片段内容下方是否存在持久性 BottomSheet?

    Using a 持久底表 https material google com components bottom sheets html bottom sheets persistent bottom sheets 在一个协调器布局 htt
  • 更新到 Kotlin 1.3.30 后出现“未解析的引用:Parcelize”

    我使用 Kotlin 1 3 21 很长时间了kotlin android extensions插件长期处于实验模式 今天我通过升级版本切换到 Kotlin 1 3 30 现在无论我使用什么 Parcelize注释我看到错误 Unresol
  • Monodroid 示例/带有源代码的小部件

    我是一名 NET 开发人员 我对用 C 开发 Android 应用程序感兴趣 并且我得到了 monodroid 是否有任何来源可以让我获得 monodroid 示例应用程序 带有源代码 这将帮助我在 monodroid 中开发应用程序 或者
  • RecyclerView 在聊天屏幕中的 notificationDataSetChanged 上滚动到顶部

    我正在尝试使用 recyclerView 创建消息传递类型的屏幕 该屏幕将从底部开始 并在用户到达聊天顶端时加载更多数据 但我面临着这个奇怪的问题 我的 recyclerView 在调用 notificationDataSetChanged
  • 警报对话框中的 Webview 不显示内容

    我正在开发一个 Android 应用程序 我需要在网络视图和警报对话框上显示一个网站 该站点显示在网络视图中 但不显示在警报对话框中 到目前为止 这是我的代码 WebView WebView myWebView WebView v find
  • 表面视图+gl表面视图+框架布局

    我是 java 和 OpenGL 的新手 我正在尝试获得一个相机预览屏幕 能够 同时显示 3D 对象 浏览完样本后 api 演示 我想结合示例的代码 api 演示就足够了 但不知何故它不起作用 迫使我 启动时关闭 错误被称为空指针 例外 有
  • 将人类日期(当地时间 GMT)转​​换为日期

    我正在服务器上工作 服务器正在向我发送 GMT 本地日期的日期 例如Fri Jun 22 09 29 29 NPT 2018在字符串格式上 我将其转换为日期 如下所示 SimpleDateFormat simpleDateFormat ne
  • 在 Xamarin 中隐藏软键盘

    如何隐藏软键盘以便在聚焦时显示Entry在 Xamarin forms 便携式表单项目中 我假设我们必须为此编写特定于平台的渲染器 但以下内容不起作用 我创建自己的条目子类 public class MyExtendedEntry Entr
  • Jetpack Compose 中复选框中的透明复选标记

    在我的 Compose 应用程序中 我需要创建一个圆形复选框 我已经通过下面的代码实现了这一点 Composable fun CircleCheckBox isChecked Boolean modifier Modifier Modifi
  • 找不到数据库路径是不可能的

    我对 android 开发很陌生 现在我正在尝试通过扩展 SQLiteOpenHelper 的类创建数据库 我确信数据存储在我的 Nexus 7 我用来测试应用程序的设备 上的某个位置 但是我找不到数据库的路径 我四处寻找其他类似的问题 所
  • JetPack Compose - 卡中行中的weight() 不起作用

    创建 Android 应用程序时 我将一些可组合项放在卡片的一行中 如下所示 但它没有按我的预期工作 我添加 weight 1f 的可组合项不再显示 data class Test val title String val text Str
  • 如何在android中安装和使用couch db

    我应该如何在 android 中安装和使用 couch Db 我的意思是本地沙发数据库 我可以在平板电脑和模拟器中使用它 为此我必须遵循哪些步骤 我目前正在开发一个使用它的项目 有两种选择 1 couchbase android 是的 co
  • ARM Chromebook 上的 Android 开发环境?

    我尝试了多次安装和使用安卓工作室 https developer android com studio index html on an ARM Chromebook C100P https archlinuxarm org platfor
  • Android Espresso 单击按钮时出现错误

    我正在尝试使用 espresso 框架为 Android 应用程序编写一些 UI 测试 现在我只是检查启动屏幕上是否存在所有元素 然后尝试单击登录按钮 单击按钮时 测试由于错误而失败 我似乎无法理解为什么会发生这种情况 我的测试代码是 Ru

随机推荐

  • 在哪里可以获得 BERT 的预训练词嵌入?

    我知道 BERT 的总词汇量为 30522 其中包含一些单词和子词 我想获得 BERT 的初始输入嵌入 所以 我的要求是获得尺寸表 30522 768 我可以通过 token id 进行索引来获取其嵌入 我在哪里可以得到这张桌子 BertM
  • gl_PointSize、gl_Position、gl_FragCoord之间的关系

    例子 VS 着色器 void main gl Position vec4 0 0 0 1 gl PointSize 100 0 画布为 1x5 像素 宽度 高度 片段着色器使用 gl FragCoord 这 5 个像素的 gl FragCo
  • 从活动类中打开 Android 导航抽屉

    我正在开发安卓系统Navigation Drawer通过他们的文档看起来 抽屉只能扩展 Fragment Activity 因此要从我的所有活动中打开抽屉 我需要将我的所有活动变成一个片段 这不是一个可行的解决方案 有没有办法打开一个从 A
  • 如何在删除 SQLite 数据库中的行后更新 KEY_ROWID

    从数据库中删除一行后 如何更新 SQLite 数据库中的 KEY ROWID 编号 情况1 例如 如果我的数据库中有五行 则此时 KEY ROWID 的最大值为 5 我删除表中的所有行 然后我添加新行 此时KEY ROWID不再从1开始 它
  • Terraform 从 Packer 中创建的托管磁盘映像创建 VM

    我已经使用 Packer 创建了一个自定义 VM 映像 现在我尝试使用 Terraform 基于此映像创建一个新 VM 但我对如何设置 TF 文件感到困惑 我可以创建其余的基础设施 我认为我的打包器 json 文件创建了一个托管磁盘映像 但
  • Objective-c 中的 AES256 解密问题

    我正在尝试使用以下代码片段来解密文件 该文件是使用 32 字节密钥加密的 因此 当我尝试加密文件数据时 一切正常 但是当我尝试解密时 程序甚至没有通过条件if cryptStatus kCCSuccess 在 CryptoExtension
  • 使用 Visual Studio 或 TFS 在项目之间共享资源(图像/css/js)

    有没有一种有效的方法可以在不同项目之间共享视觉资源 这包括图像 CSS 和 JavaScript 我查看了以下 Stack Overflow 问题 但似乎没有回答这个问题 在 Visual Studio 中的不同项目之间共享 css jav
  • 突出显示一行时是否触发任何事件?

    我创建了一个 ListView 来显示文档列表 然后创建了一个按钮 按钮 A 来执行一些操作 我的要求是我希望按钮状态可以随着所选文档的更改而更改 Fox示例 下图中有三个文档 我希望当我单击Order 00001或Order 00002时
  • 仅从文件的完整路径获取文件名

    我想分割路径 只保存文件名test xls在一个新变量中 namearray C Users z003m Desktop Service Tickets automationscript vbs Newfolder test xls 推荐使
  • Euler 23 在 C# 中:0.2 秒,在 F# 中:30.5 秒。为什么?

    我对这个问题的 F 解决方案不太满意 因为我找不到一个漂亮且快速的解决方案 但这不是这里的问题 问题是 我将解决方案翻译成 C 而且速度很快 就像 相对而言 速度非常快 我不明白为什么 是的 我去过 Reflector C 代码看起来很相似
  • XDebug 真的很慢

    我正在尝试让 XDebug 在我的本地 wamp 安装 Uniform Server 8 上运行 但是当我把xdebug remote enable 1 在我的 php ini 中 这是我的 IDE 使用 xdebug 所必需的 加载页面变
  • WPF 无边框窗口的 DropShadow

    我有一个 WPF 窗口 WindowStyle 设置为 none 有什么方法可以强制这个窗口留下阴影 就像 WindowStyle 不是 none 时得到的阴影一样 我不想将AllowTransparency 设置为true 因为它会影响性
  • 检测 Javascript 中字符串中的重复字母

    用于检测字符串中重复字母的代码 var str paraven4sr var hasDuplicates a zA Z 1 test str alert repeating string hasDuplicates 我正进入 状态 fals
  • 如何在Python中模糊匹配数组列中的项目?

    我有一系列来自 NCAA 的球队名称 以及与其相关的统计数据 学校名称通常会被缩短或完全省略 但名称的所有变体通常都有一个共同元素 例如阿拉巴马州赤潮与赤潮 这些名称全部包含在一个数组中 没有特定的顺序 我希望能够通过模糊匹配来获取团队名称
  • 在“for”循环中读取带有空格、制表符和多个输入文件的完整行

    我看过以下文章 for 环形 它会在出现空格 制表符或换行符等空白时进行分割 为了解决这个问题 我有以下额外的命令 IFS n 但是当我尝试根据以下细节解决上述场景时 我有两个文件 输入1 txt and 输入 txt 在我当前的目录中 b
  • 在 ruamel.yaml 迭代期间获取评论

    当我迭代 YAML 对象时如何获取注释 yaml YAML with open path r as f yaml data yaml load f for obj in yaml data how to get the comments h
  • Wordpress 的 nginx 配置位于同一服务器的 Rails 应用程序的子目录中

    当我尝试访问 example com blog 时 我不断收到 文件未找到 错误 并且在 var log nginx error log FastCGI sent in stderr Primary script unknown while
  • 返回一个随机偶数

    我有以下几种方法 rnd 方法返回两个边界之间的单个随机整数 Create next batch of 55 random numbers void advance random int j1 double new random for j
  • 文件上传控制和 GWT 外观

    我正在编写我的第一个 GWT 项目 我有一个带有标签 文件上传控件和上传按钮的表单 但它们在各种网络浏览器中看起来很糟糕并且差异很大 另外 文件上传控件中的按钮与 GWT 按钮控件的样式不同 另一个问题是 在 Chrome 中 文件选择按钮
  • Android Widget 在更新期间显示奇怪的图像

    我这里有一个奇怪的 我有一台配备 Nextel 的 Motorola i1 运行 Android 1 5 我有一个安卓小部件 当我开始运行更新此小部件的服务时 我看到来自另一个小部件的图像 启动 DC Contact 它在我的小部件的位置显