Skip to content

2019-05-24:什么是 RemoteViews?使用场景有哪些? #62

Open
@Moosphan

Description

@Moosphan
Owner
No description provided.

Activity

canyie

canyie commented on May 24, 2019

@canyie

这个问题出的很不错
RemoteViews没深入了解过,凭以前的记忆答:
RemoteViews保存着指定View的信息,可以让该View在你的应用之外的地方显示,(隐约记得支持的View不多)
使用场景:自定义通知视图,桌面小部件等

guosen

guosen commented on May 24, 2019

@guosen

RemoteViews
RemoteViews翻译过来就是远程视图.顾名思义,RemoteViews不是当前进程的View,是属于SystemServer进程.应用程序与RemoteViews之间依赖Binder实现了进程间通信.
用法
通常是在通知栏

//1.创建RemoteViews实例
        RemoteViews mRemoteViews=new RemoteViews("com.example.remoteviewdemo", R.layout.remoteview_layout);

        //2.构建一个打开Activity的PendingIntent
        Intent intent=new Intent(MainActivity.this,MainActivity.class);
        PendingIntent mPendingIntent=PendingIntent.getActivity(MainActivity.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

        //3.创建一个Notification
        mNotification = new Notification.Builder(this)
        .setSmallIcon(R.drawable.ic_launcher)
        .setContentIntent(mPendingIntent)
        .setContent(mRemoteViews)
        .build();

        //4.获取NotificationManager
        manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        Button button1 = (Button) findViewById(R.id.button1);
        button1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                //弹出通知
                manager.notify(1, mNotification);
            }
        });

LvKang-insist

LvKang-insist commented on May 24, 2019

@LvKang-insist

没听过。。。 打卡

ADrunkenLiBai

ADrunkenLiBai commented on May 24, 2019

@ADrunkenLiBai

皮皮侠来了,楼下给我写好点!!!!!!!!

gabyallen

gabyallen commented on May 26, 2019

@gabyallen

我们的通知和桌面小组件分别是由NotificationManager和AppWidgetManager管理的,而NotificationManager和AppWidgetManager又通过Binder分别和SystemServer进程中的NotificationManagerServer和AppWidgetService进行通信,这就构成了跨进程通信的场景。

  RemoteViews实现了Parcelable接口,因此它可以在进程间进行传输。

  首先,RemoteViews通过Binder传递到SystemServer进程中,系统会根据RemoteViews提供的包名等信息,去项目包中找到RemoteViews显示的布局等资源,然后通过LayoutInflator去加载RemoteViews中的布局文件,接着,系统会对RemoteViews进行一系列的更新操作,这些操作都是通过RemoteViews对象的set方法进行的,这些更新操作并不是立即执行的,而是在RemoteViews被加载完成之后才执行的,具体流程是:我们调用了set方法后,通过NotificationManager和AppWidgetManager来提交更新任务,然后在SystemServer进程中进行具体的更新操作。

mlinqirong

mlinqirong commented on Dec 20, 2021

@mlinqirong

RemoteViews是一个远程View 可以在其他进程中显示 用于跨进程更新它的界面 主要是用于定义通知栏和桌面小部件

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @mlinqirong@guosen@gabyallen@ADrunkenLiBai@Moosphan

        Issue actions

          2019-05-24:什么是 RemoteViews?使用场景有哪些? · Issue #62 · Moosphan/Android-Daily-Interview