android 中的RemoteView添加点击操作,是通过延迟意图PentingIntent来执行的.

应用场景: 通知栏与桌面小部件,更新不同进程间的界面

桌面部件与通知栏分别由AppWidgetManager 与 NotificationManager来管理. 
分别与systemService进程中的AppWidgetServer和NotificationManagerServer进行通讯 
所以,才需要RemoteView来更新界面.RemoteView实现了Paracelable,通过Bindler传递到 
systemService进程中.

通知栏:

1.现在清单文件中做如下配置

<!-- appwidget的receiver --><receiver android:name="com.wmh.mobilesafe.receiver.AppWidgetProvider" ><intent-filter><action android:name="android.appwidget.action.APPWIDGET_UPDATE" /></intent-filter><meta-dataandroid:name="android.appwidget.provider"android:resource="@xml/appwidget_info" /></receiver>

2.配置@xml/appwidget_info文件,xml文件夹是res文件夹的子文件夹

2.1 先介绍各个属性的含义

<!-- <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="294dp"
android:minHeight="72dp"//能被调整的最小宽高,若大于minWidth minHeight 则忽略
android:updatePeriodMillis="86400000"//更新周期,毫秒,最短默认半小时
android:previewImage="@drawable/preview"//选择部件时 展示的图像,3.0以上使用,默认是ic_launcher
android:initialLayout="@layout/example_appwidget"//布局文件
android:configure="com.example.android.ExampleAppWidgetConfigure"//添加widget之前,先跳转到配置的activity进行相关参数配置
android:resizeMode="horizontal|vertical"//widget可以被拉伸的方向。horizontal表示可以水平拉伸,vertical表示可以竖直拉伸
android:widgetCategory="home_screen|keyguard"//分别在屏幕主页和锁屏状态也能显示(4.2+系统才支持)
android:initialKeyguardLayout="@layout/example_keyguard"//锁屏状态显示的样式(4.2+系统才支持)
>
</appwidget-provider> -->

2.2下面是我的配置

<?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:initialLayout="@layout/process_widget">
</appwidget-provider>

3.配置广播接收者

public class AppWidgetProvider extends android.appwidget.AppWidgetProvider{/**1.onEnabled 创建第一个窗体小部件的方法的时候调用*2.onUpdate 创建多一个窗体小部件的方法*3.onAppWidgetOptionsChanged 当窗体小部件的宽高方式改变的时候调用,创建的时候也调用*4.onDeleted 删除小部件调用的方法*5.onDisabled 删除最后一个窗体小部件调用的方法*/@Overridepublic void onReceive(Context context, Intent intent) {super.onReceive(context, intent);}//创建第一个窗体小部件的方法@Overridepublic void onEnabled(Context context) {super.onEnabled(context);//开启服务context.startService(new Intent(context,UpdateWidgetService.class));}//删除最后一个窗体小部件调用的方法@Overridepublic void onDisabled(Context context) {super.onDisabled(context);//关闭服务}
}

4.配置服务,用来实时更新窗体小部件

public class UpdateWidgetService extends Service {private Timer timer;private TimerTask task;@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {super.onCreate();// 管理进程总数和可用内存数的更新startTimer();}private void startTimer() {timer = new Timer();task = new TimerTask() {@Overridepublic void run() {// UI定时更新UpdateAppWidget();}};timer.scheduleAtFixedRate(task, 0, 2000);// 比schedule要好}protected void UpdateAppWidget() {// 1.获取APPwidget的对象AppWidgetManager aWM = AppWidgetManager.getInstance(this);// 2.获取窗体小部件的布局转化成的ViewRemoteViews view = new RemoteViews(getPackageName(), R.layout.process_widget);// 3.给窗体小部件view对象,内部空间赋值view.setTextViewText(R.id.tv_process_count,"进程数:" + ProcessInfoProvider.getProcessCount(getApplicationContext()));String availMemory = Formatter.formatFileSize(getApplicationContext(),ProcessInfoProvider.getAvailMemory(getApplicationContext()));view.setTextViewText(R.id.tv_process_memory, "可用内存:" + availMemory);// 设置点击事件进入应用 PendingIntent延期的意图Intent intent1 = new Intent();intent1.setAction("android.intent.action.splash");intent1.addCategory("android.intent.category.DEFAULT");// FLAG_CANCEL_CURRENT 点了就消失PendingIntent pendingIntent1 = PendingIntent.getActivity(this, 0, intent1, PendingIntent.FLAG_CANCEL_CURRENT);view.setOnClickPendingIntent(R.id.ll_widget_root, pendingIntent1);//通过延期意图发送广播,在广播接收者中杀死进程Intent broadCastIntent = new Intent("android.intent.action.KILL_BACKGROUND_PROCESS");PendingIntent pendingIntent2 = PendingIntent.getBroadcast(getApplicationContext(), 0, broadCastIntent, PendingIntent.FLAG_CANCEL_CURRENT);view.setOnClickPendingIntent(R.id.bt_clear, pendingIntent2);// 更新的操作 后面的参数是窗体小部件对应的的广播接收者  attention:这一步写在最后边ComponentName componentName = new ComponentName(getApplicationContext(), AppWidgetProvider.class);aWM.updateAppWidget(componentName, view);}@Overridepublic void onDestroy() {super.onDestroy();if (timer != null && task != null) {timer.cancel();task.cancel();}}}

5.配置清理进程的广播接收者

public class killBackGroundReicever extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {//接收广播,清理进程ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);List<RunningAppProcessInfo> runningAppProcesses = am.getRunningAppProcesses();for (RunningAppProcessInfo runningAppProcessInfo : runningAppProcesses) {am.killBackgroundProcesses(runningAppProcessInfo.processName);}}}

Android之RemoteView相关推荐

  1. Android AppWidget RemoteView

    坑: AndroidMenifest.xml中一定要声明permission <?xml version="1.0" encoding="utf-8"?& ...

  2. android实现自动取消订单,android – 使用RemoteView自动取消自定义通知

    我实现这一目标的方法是创建BroadcastReceiver,它控制来自Notification的按钮点击.创建这样的东西: public class NotificationButtonListen ...

  3. 异常分析 (空间太小)

    出现 异常的原因: 碎片化 . MobileAPI脏数据 混淆时没有Keep 要使用的类或者方法  .     本地开发要与线上分开    异常信息中提示  "方法名"unknow ...

  4. Android App Widget中如何调用RemoteView中的函数

    我们在开发App Widget时候,要创建一个RemoteView来呈现界面.但是会发现如果我们想要控制RemoteView中的view时候是无法使用findViewbyId来控制Child View ...

  5. Android中的remoteView

    最近在学习中遇到了一个以前没有接触过的知识点remoteView,通过查阅资料,我发现了关于remoteView的一些相关特性. 1.RemoteView概述: 到目前为止,我发现RemoteView ...

  6. Android RemoteView的应用 一 桌面控件

    这回通过RemoteView来制作一个能够接受点击事件的桌面控件. 1. 在res/layout 新建widget文件,这是设计桌面控件的界面 <?xml version="1.0&q ...

  7. remoteview android,android remoteView原理

    android 中的remoteView通常用于更新远程的界面. 其实现了Paracelable接口,通过Bindler就可以传送到远程. 然后通过该类的 apply来更新界面. 其实,在我们通过该类 ...

  8. android remoteview 缓存,关于RemoteView的一点愚见(实现桌面小部件)

    RemoteView中的应用除了有通知栏的自定义之外,还有桌面小部件也是通过RemoteView以及AppWidgetProvider来完成的. 实际上AppWidgetProvider是一个广播,即 ...

  9. android 自定义推送布局_Notification的基本用法以及使用RemoteView实现自定义布局

    Notification的作用 Notification是一种全局效果的通知,在系统的通知栏中显示.既然作为通知,其基本作用有: 显示接收到短消息.即时信息等 显示客户端的推送(广告.优惠.新闻等) ...

最新文章

  1. [Springboot实战] 集成 Caffeine
  2. 一份传世典文:十年编程(Teach Yourself Programming in Ten Years)
  3. python工程师-如何面试Python后端工程师?
  4. FPGA 起脚nCEO/IO管教设置问题
  5. Object 标签遮挡 Div 显示
  6. 《长安十二时辰》背后的文娱大脑:如何提升爆款的确定性?
  7. VS2017中的附加到进程
  8. source insight怎样恢复默认界面设置
  9. AWS EC2实例Ubuntu系统设置root用户密码并使用root/ubuntu用户登录
  10. 功夫小子实践开发-游戏设置功能的实现
  11. 能源管理系统在企业中的应用及系统介绍
  12. MMKV_MMKV使用教程
  13. STM32单线串口对总线舵机的控制
  14. python如何调整图片大小_Python实现图片尺寸缩放脚本
  15. PHP生成缩略图、加水印
  16. 【读书笔记】吴军阅读与写作讲义
  17. SitePoint播客#57:不是负面
  18. 二十:让行内元素在div中垂直居中
  19. python中的英文歌_Python 爬网易音乐云歌曲,MV
  20. window10下Oracle 12c详细安装教程

热门文章

  1. cube escape语言设置_Cube Escape: The Mill攻略大全 最全通关详细过程
  2. 使用parted 对大容量盘进行分区
  3. WifiDirect (WIFIP2P) 最全最详细,应用于智能硬件(智能家居,车机,无人机)等。
  4. MFC设置文本框只读/不可编辑,可复制
  5. 毫米波雷达以及在ADAS中的应用
  6. 拓展心得体会:团建游戏-人多力量大
  7. CAPL: 定时器事件
  8. 记录一个有关offsetWidth的怪异问题
  9. 使用图灵机器人实现虚拟客服
  10. PLC编程中网络通讯方式有几种?