美文网首页
singleTop模式应用场景 以及OnNewIntent

singleTop模式应用场景 以及OnNewIntent

作者: KingWorld | 来源:发表于2020-10-24 10:23 被阅读0次

    转载:singleTop模式应用场景 以及OnNewIntent

    特点

     栈顶复用模式
    
    

    应用场景

    1、消息推送界面。

    如果当前停留在消息详情界面A,突然来推送消息了,点击推送消息,又创建了一个详情界面A,按返回键back,用户会发现,点击了返回怎么还是停留在这个详情界面A呢,这样造成视觉差异

    2、网易新闻。

    假设主界面为 MainActivity,显示新闻的界面是 DetailActivity,显然显示任何一条新闻都会使用 DetailActivity,即把新闻内容通过 Intent 传给 DetailActivity 就可以了。 假设你正在看新闻1(即在 DetailActivity),此时手机收到服务器的推送:收到一条通知(新闻2),点击通知就会跳转到 DetailActivity 并显示新闻2,当你点击通知时,因为目前栈顶的 Activity 就是 DetailActivity,因此这里就是使用 SingleTop 的地方,即点击通知后以 SingleTop 加载模式打开 DetailActivity 并显示新闻2,因此新闻1的 DetailActivity 就被覆盖掉了。 此后你点击返回键会回到主界面。

    OnNewIntent

    针对网易新闻这个案例来看,DetailActivity一般是一个webView,然后 根据上一个页面(新闻列表)传过来的url展示对应的网页,“通知“也是一样的。都是通过intent把url传到DetailActivity。以下一段代码简单的模拟DetailActivity 接收数据的过程。

    1、第一个页面

            fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    NotificationManager manager;
                    Intent intent = new Intent(MainActivity.this,DetailActivity.class);
                    //通知传递的数据
                    intent.putExtra("name","Notification");
                    PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this,
                            0,intent,PendingIntent.FLAG_CANCEL_CURRENT);
                    manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
                    Notification.Builder  builder = new Notification.Builder(MainActivity.this);
                    builder.setTicker("您有一条新消息")//要有,不然只会发一个通知,不会弹出消息提示你,即Notification在状态栏的提示文本
                            .setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_SOUND)//设置默认值如LED灯,音乐,颜色,震动等
                            .setContentText("您的订单已被接收,请耐心等待...")//要有,不然没内容
                            //这行代码的作用就是当点击该通知时,把该通知自动清除掉,不设置的话,点击不会自动清除,必须得点击手机通知栏里的清除按钮才能清除
                            .setAutoCancel(true)
                            .setSmallIcon(R.drawable.cloud)//必须要有,不然点击没反应
                            .setContentTitle("张三")//要有,不然只有内容没有标题
                            .setContentIntent(pendingIntent);//设置点击通知后将要跳转到的目的程序
                    Notification notification = builder.getNotification();
                    manager.notify(1,notification);
    
                    Intent intent2 = new Intent(MainActivity.this,DetailActivity.class);
                    //非通知情况下传递数据
                    intent2.putExtra("name","yuzhiyun");
                    startActivity(intent2);
    
                }
            });
    
    

    2、跳转后页面

    package com.yuzhiyun.learn.singletop;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.design.widget.FloatingActionButton;
    import android.support.design.widget.Snackbar;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.util.Log;
    import android.view.View;
    import android.widget.TextView;
    
    public class DetailActivity extends AppCompatActivity {
    
        TextView textView;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
    
            textView = (TextView) findViewById(R.id.tv_intent);
            dealIntent();
        }
    
        /**
         * 当启动模式为singletop的,第二次打开这个activity的时候,就不再onCreate(),而是走onNewIntent(),这样才能获取到新的数据
         * @param intent
         */
        @Override
        protected void onNewIntent(Intent intent) {
            super.onNewIntent(intent);
            //必须设置新的intent
            setIntent(intent);
            Log.i("onNewIntent","onNewIntent");
            dealIntent();
    
        }
    
        private void dealIntent() {
            textView.setText(getIntent().getStringExtra("name"));
        }
    }
    

    相关文章

      网友评论

          本文标题:singleTop模式应用场景 以及OnNewIntent

          本文链接:https://www.haomeiwen.com/subject/hgsimktx.html