Widget简介

Data+AI新玩法:Text2SQL让数据查询变得如此简单! 你是不是也遇到过这种情况?明明手头有海量数据,却因为SQL这道“门槛”,让分析和决策变得复杂和拖沓。你可能想着:“要是我能直接用自然语言和数据库对话,那该多好!你不是一个人在这样想,Text2SQL技术正是为了帮你摆脱这一困境而诞生的。 阅读详情

Widget简介

可以使用AppWidgetManager更新Widget中的数据,但这样最短也要半个小时才能更新一次,一般不用他更新,而是自己定义一个服务去更新Widget中的数据。

Widget的创建步骤

  1. 写一个类继承AppWidgetProvider,这个是一个广播接收者,所以要在清单文件中进行配置

    public class MyWidget extends AppWidgetProvider {
        @Override
        public void onEnabled(Context context) {
            //开启服务定期的更新界面.
            Intent intent = new Intent(context,UpdateWidgetService.class);
            context.startService(intent);
            super.onEnabled(context);
        }
    
        @Override
        public void onDisabled(Context context) {
            //关闭掉服务
            Intent intent = new Intent(context,UpdateWidgetService.class);
            context.stopService(intent);
            super.onDisabled(context);
        }
    
        @Override
        public void onUpdate(Context context, AppWidgetManager appWidgetManager,
                int[] appWidgetIds) {      
    
            //Widget布局中定义的更新时间到了。检查下 服务是否还活着.
            if(!ServiceStatusUtil.isServiceRunning(context, "com.itheima.mobilesafe.service.UpdateWidgetService")){
                Intent intent = new Intent(context,UpdateWidgetService.class);
                context.startService(intent);
            }
            super.onUpdate(context, appWidgetManager, appWidgetIds);
        }
    }
  2. 在清单文件中进行配置,内容如下:

    <receiver android:name=".receiver.MyWidget" >
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>
        <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/example_appwidget_info" />//这里使用到了一个xml文件,所以要创建这个文件
    </receiver> 
  3. 在res下面新建一个名为xml的文件件,然后新建example_appwidget_info.xml内容如下

    <?xml version="1.0" encoding="utf-8"?>
    <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
        android:minWidth="294dp"
        android:minHeight="72dp"
        android:updatePeriodMillis="86400000" //指定更新的间隔时间,最小为半个小时,一般不用它更新,都是自己更新
        android:previewImage="@drawable/preview"//指定小控件的图标,如果不要这个选项就是程序的图标
        android:initialLayout="@layout/example_appwidget"//设置这个小控件的布局文件
        android:configure="com.example.android.ExampleAppWidgetConfigure" //有些复杂的Widget在点击的时候会去开启一个Activity,
        // 这时候就是通过这个参数来配置要开启的Activity,用不着就删除这一行 android:resizeMode="horizontal|vertical">
        //这个是Android3.0的一个新特性,是可以让widget改变大小,在2.3时候创建出来的Widget多大就是多大,不能改变,可以把这个去掉
    </appwidget-provider>
  4. 更新Widget数据的服务

    public class UpdateWidgetService extends Service {
        private Timer timer;
        private TimerTask task;
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
        @Override
        public void onCreate() {
            super.onCreate();
            // 开启定期的任务更新widget.
            timer = new Timer();
            task = new TimerTask() {
                @Override
                public void run() {
                    AppWidgetManager awm = AppWidgetManager
                            .getInstance(getApplicationContext());
                    ComponentName component = new ComponentName(
                            getApplicationContext(), MyWidget.class);
                    RemoteViews views = new RemoteViews(getPackageName(),
                            R.layout.process_widget);
                    views.setTextViewText(
                            R.id.process_count,
                            "正在运行:"
                                    + ProcessStatusUtils.getProcessCount(getApplicationContext())
                                    + "个");
                    views.setTextViewText(
                            R.id.process_memory,
                            "可用内存:"
                                    + Formatter
                                            .formatFileSize(
                                                    getApplicationContext(), ProcessStatusUtils.getAvailRAM(getApplicationContext())));
                    Intent intent = new Intent();
                    intent.setAction("com.itheima.killall");
                    //设置一个自定义的广播事件 动作  com.itheima.killall
                    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);
                    views.setOnClickPendingIntent(R.id.btn_clear, pendingIntent);
                    awm.updateAppWidget(component, views);
                }
            };
            timer.schedule(task, 1000, 2000);
        }
        @Override
        public void onDestroy() {
            timer.cancel();
            task.cancel();
            timer = null;
            task = null;
            super.onDestroy();
        }
    }

Widget的声明周期

`Widget`就是一个特殊的广播接收者
1. 当界面上第一个`widget`被创建的时候
    01-14 02:17:14.348: INFO/System.out(1853): onEnabled   当`widget`第一次被创建的时候调用. 非常适合做应用程序的初始化.
    01-14 02:17:14.348: INFO/System.out(1853): onReceive
    01-14 02:17:14.357: INFO/System.out(1853): onUpdate     当有新的`widget`被创建的时候 更新界面的操作. 当时间片到的时候`onupdate()`调用.
    01-14 02:17:14.357: INFO/System.out(1853): onReceive

2. 当界面上第二个`widget`被创建的时候 
    01-14 02:18:10.148: INFO/System.out(1853): onUpdate
    01-14 02:18:10.148: INFO/System.out(1853): onReceive

3. 再创建新的`widget`
    01-14 02:18:10.148: INFO/System.out(1853): onUpdate
    01-14 02:18:10.148: INFO/System.out(1853): onReceive

4. 从界面上移除一个`widget`
    01-14 02:19:11.709: INFO/System.out(1853): onDeleted
    01-14 02:19:11.709: INFO/System.out(1853): onReceive

5. 最后一个`widget`被移除
    01-14 02:19:37.509: INFO/System.out(1853): onDeleted
    01-14 02:19:37.509: INFO/System.out(1853): onReceive
    01-14 02:19:37.509: INFO/System.out(1853): onDisabled  当`widget`从界面上全部移除的时候调用的方法. 非常适合删除临时文件停止后台服务.
    01-14 02:19:37.509: INFO/System.out(1853): onReceive

6. `widget`就是一个特殊的广播接受者 当有新的事件产生的是 肯定会调用 `onReceive()`;

**
注意: 在不同的手机上 widget的生命周期调用方法 可能有细微的不同.
360桌面 go桌面 awt桌面 腾讯桌面 小米桌面
**


  • 邮箱 :charon.chui@gmail.com
  • Good Luck!
2019年高教社杯全国大学生数学建模竞赛 C 题:《机场的出租车问题》真题解析与 MATLAB 解决方案 🏆 本文已收录于专栏:《滚雪球学数学建模(含历年真题)》,持续更新最新及历年数学建模竞赛资料,每篇内容力求做到“问题讲透、模型讲清、代码可用、论文可参考”,帮助你从零开始逐步建立完整的数学建模知识体系。 阅读详情

相关推荐

普元EOS8.3精简版安装指南:从零开始搭建低代码开发环境

本文详细介绍了普元EOS8.3精简版的完整安装流程。从JDK1.8环境准备、MySQL数据库配置与初始化,到核心配置文件修改、服务启动与登录验证,提供了从零开始搭建低代码开发环境的清晰步骤和常见问题排坑指南,帮助开发者快速部署并体验平台核心功能。

ik678901的博客 1105

QT学习过程中常用语句

本条博客用于记录本人学习QT过程遇到的常用语句和困惑点。

original14的博客 454

微电网系列: 位移因数DPF&&功率因数PF&&过激&&欠激

文中对比了位移因数(DPF,仅基波相位)与功率因数(PF,含谐波影响)的差异,指出PF=DPF×DF(畸变因数)。过激/欠激状态对应无功功率控制:过激(容性,电流超前,抬升电压)与欠激(感性,电流滞后,抑制电压)。PCS(如光伏逆变器)需逆向调节电网无功状态,过激时发出容性无功,欠激时吸收感性无功,以维持电压。

云纳星辰怀自在 1174

QML与c++交互学习笔记(七)

1.假设这样一种情况 我这里由一个Wideget继承自QWidget上面添加来一个QLabel,一个QPushButton 我如何把这个Wideget放到QML中使用,那么我当QPushButton按下后我怎么在QML中进行处理呢? 我这里指出一种方法 让Wideget继承QGraphicsProxyWidget,对Wideget进行导出,在QML中创建 此对象,在他导出的信中进行处理,具...

feipigwang 157

C#.NET斗地主服务端核心架构与高性能实现

斗地主作为典型的实时对战棋牌逻辑,本质是状态驱动的分布式协同问题。其技术内核涵盖有限状态机建模、低延迟网络同步、无GC内存操作与轻量级AI决策等关键能力。在.NET平台下,借助Span<T>、ImmutableArray、命令/事件总线与内存池等特性,可构建出高吞吐(200+ QPS)、低延迟(<150ms)、强一致的可落地服务端。本文聚焦C#.NET生态中斗地主核心模块的设计取舍与压测验证,深入解析状态机驱动、CardSet结构体优化、Kestrel中间件锁、规则+概率混合AI等实战方案,为实时对战类业务

weixin_29726381的博客 346

Windows 11 Docker Desktop 数据迁移:WSL 2 发行版导出/导入 5步法详解

本文详细介绍了Windows 11下Docker Desktop数据迁移的5步法,通过WSL 2发行版的导出/导入技术,实现C盘空间释放和存储空间优化。该方法支持无损迁移容器、镜像和卷数据,并提供异常处理和进阶优化技巧,帮助开发者彻底解决Docker Desktop存储空间不足的问题。

weixin_30908103的博客 493

Android 之 App Widegets(窗口小部件)

应用程序窗口小部件 应用程序窗口小部件是微小的应用程序视图,可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新。在用户界面中这些视图称为窗口小部件,你可以通过一个App Widget provider来发布一个部件。App Widget宿主是可以容纳其它App Widget的应用程序组件。下面的截屏显示了一个音乐应用程序窗口小部件。 这篇文章描述了如何使用App Widget P

a19860903的专栏 1424

60、新型共轴直升机建模与事件触发积分强化学习研究

本文研究了新型共轴直升机的动力学建模与控制方法,基于牛顿-欧拉方程建立了6自由度非线性模型,并设计了四通道闭环控制器实现稳定飞行。同时,提出一种事件触发积分强化学习方法,用于解决非零和博弈中的最优跟踪控制问题,在减少通信开销的同时保证系统性能。通过仿真验证了控制器的轨迹跟踪能力,并证明了算法下跟踪误差与神经网络权重估计误差的一致最终有界性。两种方法协同可提升飞行器的自主性与鲁棒性,未来可拓展至多智能体协作、智能交通等复杂系统应用。

rl6adventurer的博客 118

一个在widegets平台上实现的时钟程序

 在当今IT产业发展两大方向,嵌入式和Web(无线和有线)都离不开跨平台的概念。对于C++程序员来说,Widegets是一个非常好的跨平台的开发库。这里我给大家介绍一个简单的Widgets开发的市中小程序,借此可以对比一下它和MFC的共同点和区别。 1.主线程创建的对比   我们知道一般来说,使用MFC的程序员会使用MFC固有的设计模式来实现程序(比如说:视图文档),所以主线程

张启宇(Joey Zhang)的专栏 1408

uniapp - 解决在线预览PDF文件空白打不开的问题,无论是后端下载二进制文件流pdf还是本地插件或JS预览查看打开白屏不显示,详细排查解决(适用于移动端H5网页、安卓/苹果app、微信小程序)

uniapp App端 实现pdf文件预览打开白屏解决,uniapp 在线预览pdf打开一片空白,跨域白屏,uni-app中使用WebView预览PDF文件打开空白,微信小程序(uniapp)预览PDF空白怎么办,下载PDF文件流后打开空白或无法打开的问题,Uniapp H5网页下载二进制pdf文件页面空白以及解决文件损坏打不开的情况,Uniapp app在线预览pdf文件流,PDF加载出来怎么办,服务器后端返回PDF文件流后前端进行下载但打开后一片白屏,解决pdf文件流,预览全是空白页,pdf文件流,下载

🏆 前端领域优质创作者 1万+

让 RAP 弹窗参数真正变成必填:Excel Upload Action 的两种实现路径

摘要 在RAP应用中,action弹窗参数经常缺乏必填校验,导致用户体验差。本文提出两种解决方案:1)在action实现中手动校验,简单但交互不流畅;2)通过root abstract entity和abstract BDEF建模,利用field(mandatory)实现框架级校验,推荐此长期方案。后者将约束集中到模型层,使UI与执行期校验一致,特别适合ABAP Cloud环境。以Excel导入为例,强制填写备注和明确选择试运行,可避免审计问题,提升系统可靠性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 200

如何设置QTableWideget和行高和列宽

如何设置QTableWideget和行高和列宽 QTtableView或者QTableWidget的verticalH

Kp0fS的草稿纸 6048

基于若依的ruoyi-nbcio-plus支持VForm3表单字段数据保存到数据库的一种方法——全网首创(三)

基于若依的ruoyi-nbcio-plus支持VForm3表单字段数据保存到数据库的一种方法——全网首创(三)

宁波阿成的博客 526

2.2 Widget 简介

flutter开发之Widget简介

u013712343的博客 1022

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Widget是一切,Widget简介

作为一个初学者,好像什么都不懂哦!但是,我感觉已经深深地刻入了我的心中,因为它在代码中真的是随处可见!我百度了一番,翻译是,真的是很可爱了!所以,庞大的就好像一个变形金刚,是组装起来的。说正经的,中的的概念是非常广泛的,它不仅是ui元素,也可以是一些功能性的组件:比如手势检测的,用于主题数据传递的等等。...

あなたの可愛い41 4116

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Flutter Widget简介

概念: 在Flutter中几乎所有的对象都是一个Widget。与原生开发中“控件”不同的是,Flutter中的Widget的概念更广泛,它不仅可以表示UI元素,也可以表示一些功能性的组件如:用于手势检测的 GestureDetector widget、用于APP主题数据传递的Theme等等,而原生开发中的控件通常只是指UI元素。 Widget与Element 在Flutter中,Widget...

随风的博客 527

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Flutter学习 Widget简介

1. Widget 概述 1.1 Widget概念 在 Flutter 中,几乎所有的对象都是一个 Widget ,与原生的“控件”的,Flutter 中的 Widget 是一个更广泛的概念,正所谓一切皆可Widget, 它不仅可以表示 UI 元素,也可以表示一些功能性的组件,例如 Theme、GuestureDector等。 Flutter 的 Widget 其实就是 “组件”、“部件”、“控件”的概念, 因为其实际灵感是来源于 React, 所以其目标就是通过 Widget 嵌套 Widget 的方式

RikkaTheWorld 3834

android的组件widget简介,Flutter widget组件简介

一、简介Flutter Widget采用现代响应式框架构建,核心思想是用widget组件来构建UI,当widget的状态发生变化时,widget也会对应重新构建UI,Flutrer会对比前后变化的不同,以确定底层渲染树从一个状态转换到下一个状态所需的最小更改。二、入口程序通过flutter create创建的项目,我们可以看到在lib目录下有一个默认的mian.dart文件,下面来看下这个文件里的...

weixin_35739967的博客 309

Symbian Widget简介

米度软件:www.midosoft.cn  PC系统上叫 widget, 大概意思就是桌面小工具, 参考 http://baike.baidu.com/view/704016.htm, google 桌面小工具应该就属于此类. 从Symbian 9.3 (S60 3.2 ,UIQ 3.3)开始也支持web widget了, widget的运行需要web runtime的支持. We

米度软件的专栏 459

Flutter中的Widget Key简介

如果我们在应用程序中运行上述代码,并点击任意一个计数器的按钮,所有的计数器都会被重新构建,导致计数器的状态丢失。总之,通过为每个widget指定Key,我们可以帮助Flutter正确地区分不同的widget,从而保留widget的状态,并提高应用程序的性能和响应性能。当我们使用StatefulWidget时,如果没有为widget指定Key,则当widget树中的某个节点发生变化时,Flutter会重新创建所有的State对象,这可能导致widget的状态丢失。

weixin_44216461的博客 1358

Android widget简介及demo

待续·····

Venus 的博客 1211

android的组件widget简介,Android Widget 桌面组件开发介绍

Android widget 桌面组件开发Widget是Android1.5版所引进的特性之一.Widget,可让用户在主屏幕界面及时了解程序显示的重要信息.标准的Android系统已包含几个Widget的示例,如模拟时钟,音乐播放器等.一、AppWidget 框架类1、AppWidgetProvider:继承自 BroadcastRecevier , 在AppWidget 应用 update、e...

weixin_28750379的博客 1301

App Widget简介案例

1 App Widget简介 App Widget是应用程序窗口小部件(Widget)是微型的应用程序视图,它可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新。你可以通过一个App Widget Provider来发布一个Widget。 本文参考Android官方文本,先介绍App Widget的主要组件,然后再以示例来详细说明。     2 App

张小贝的博客 539

零基础学Flutter之Widget简介及使用

零基础学Flutter之Widget简介及使用Widget 简介什么是Widget什么是ElementsStateless WidgetStateful Widget Widget 简介 上一章我们简单的实现了一个hello world的小案例 ,其中我们知道项,启动会执行main方法,main方法调用了 runApp方法,其中runApp方法参数就是一个Widget对象,从这里我们得知如要写一个...

Spring框架注解学习之旅 641

【Flutter -- 基础组件】Widget 简介

上一篇,学习了 Dart 语法,对 Dart 的语法和特性有了更深一步的了解。今天,来学习 Flutter 的基础控件,身为 Android 开发者都知道,一开始入坑 Android 就要熟悉学习其控件,如:TextView,ImageView,Button,ListView,RecycleView 等。为什么要学习呢?因为平时的开发都离不开这些控件,UI 的呈现都是有这些控件组成的,因此,其重要性就不用说了。对于 Flutter 来讲,基础控件(widget)就更加重要了。Flutter 和 Androi

Kevin Learn Android 1092
上一篇: SlidingMenu
下一篇: WebView总结
CharonChui
博客等级 码龄12年 66粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值