精华内容
下载资源
问答
  • 一个正常的Flutter项目中,通过底部导航栏(BottomNavigationBar)或者标签栏(TabBar)组件来切换页面内容,是很正常的操作。但是大家是否有发现,每次导航...出现上面问题的原因是,页面的状态(State)没有被保留...

    一个正常的Flutter项目中,通过底部导航栏(BottomNavigationBar)或者标签栏(TabBar)组件来切换页面内容,是很正常的操作。但是大家是否有发现,每次导航栏或标签栏切换页面时,之前的页面就被清理了。比如,第一个页面的列表视图(ListView)已经滑动到底部,切换到第二个页面以后再回来,第一个页面的列表又回到了顶部。

    出现上面问题的原因是,页面的状态(State)没有被保留下来,所以每次页面,都会初始化一次状态。我们可以通过自动保持活动客户端混合(AutomaticKeepAliveClientMixin)抽象类来解决这个问题。

    首先是新建一个dart文件,把Flutter应用和页面的架子搭起来,然后运行调试,确认应用可以正常跑起来。

    import 'package:flutter/material.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          home: MyHomePage(title: 'Flutter Demo 主页'),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      MyHomePage({Key key, this.title}) : super(key: key);
    
      final String title;
    
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      // TODO:当前页面视图的相关变量。
    
      // TODO:切换页面视图的方法。
    
      // TODO:集中管理导航项目列表和页面组件列表。
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          // TODO:页面视图的主要内容。
        );
      }
    }
    

    下面再新建一个dart文件,作为导航项对应的页面组件,并再里面放上一个列表视图(ListView)组件,用来实验后面的代码是否实现保持页面的状态(State)。

    自动保持活动客户端混合(AutomaticKeepAliveClientMixin)抽象类,为自动保持活动(AutomaticKeepAlive)的客户端提供直接可以使用的方法,与状态(State)子类一起使用,可以避免作为父组件的页面视图(PageView)组件切换时被重新绘制。

    自动保持活动客户端混合(AutomaticKeepAliveClientMixin)抽象类的想要保持活动(wantKeepAlive)属性,用于设置当前实例是否应保持活动状态,不因父组件的切换而重新绘制。这一步很关键。

    /// 自定义的导航页面组件。
    class NavigationPage extends StatefulWidget {
      @override
      _NavigationPageState createState() => _NavigationPageState();
    }
    
    /// 与自定义的导航页面组件关联的状态子类。
    class _NavigationPageState extends State<NavigationPage>
        with AutomaticKeepAliveClientMixin {
    
      @override
      bool get wantKeepAlive => true;
    
      @override
      Widget build(BuildContext context) {
        super.build(context);
        return Scaffold(
          body: ListView.builder(
            padding: EdgeInsets.all(8.0),
            itemExtent: 20.0,
            itemBuilder: (BuildContext context, int index) {
              return Text('项目 $index');
            },
          ),
        );
      }
    }
    

    接下来要配置底部导航栏(BottomNavigationBar)组件的项目(items)属性需要的项目列表,以及对应的页面组件。

      // TODO:集中管理导航项目列表和页面组件列表。
      /// 统一管理导航项目的列表。
      List<BottomNavigationBarItem> navigationItem = [
        BottomNavigationBarItem(
          icon: Icon(Icons.home),
          title: Text('首页'),
        ),
        BottomNavigationBarItem(
          icon: Icon(Icons.comment),
          title: Text('消息'),
        ),
        BottomNavigationBarItem(
          icon: Icon(Icons.settings),
          title: Text('设置'),
        ),
      ];
    
      /// 统一管理导航项目对应的组件列表。
      final _widgetOptions = [
        NavigationPage(),
        NavigationPage(),
        NavigationPage(),
      ];
    

    然后定义一下页面视图(PageView)组件的选择索引、控制器及资源释放函数。

      // TODO:当前页面视图的相关变量。
      /// 当前页面选择的索引。
      int _selectedIndex = 0;
    
      /// 页面控制器(`PageController`)组件,页面视图(`PageView`)的控制器。
      PageController _controller = PageController();
    
      /// 释放相关资源。
      @override
      void dispose() {
        _controller.dispose();
        super.dispose();
      }
    

    因为我们使用来页面视图(PageView)组件,而页面视图组件不会自动切换页面,因此我们要自己写一下切换页面的方法。

      // TODO:切换页面视图的方法。
      void _onItemTapped(int index) {
        // 创建底部导航栏的组件需要跟踪当前索引并调用`setState`以使用新提供的索引重建它。
        setState(() {
          _selectedIndex = index;
          // 跳到页面(`jumpToPage`)方法,更改显示在的页面视图(`PageView`)组件中页面。
          _controller.jumpToPage(index);
        });
      }
    

    最后完成脚手架(Scaffold)组件上的主体内容,把上面的内容都派上用场。

          // TODO:页面视图的主要内容。
          // 页面视图(`PageView`)组件,可逐页工作的可滚动列表,每个子项都被强制与视窗大小相同。
          body: PageView.builder(
            // 物理(`physics`)属性,页面视图应如何响应用户输入。
            // 从不可滚动滚动物理(`NeverScrollableScrollPhysics`)类,不允许用户滚动。
            physics: NeverScrollableScrollPhysics(),
            itemBuilder: (BuildContext context, int index) {
              return _widgetOptions.elementAt(index);
            },
            itemCount: _widgetOptions.length,
            // 控制器(`controller`)属性,用于控制滚动此页面视图位置的对象。
            controller: _controller,
          ),
          // 底部导航栏(`bottomNavigationBar`)属性,显示在脚手架(`Scaffold`)组件的底部。
          // 底部导航栏(`BottomNavigationBar`)组件,显示在应用程序底部的组件,
          // 用于在几个屏幕之间中进行选择,通常在三到五之间,再多就不好看了。
          bottomNavigationBar: BottomNavigationBar(
            // 项目(`items`)属性,位于底部导航栏中的交互组件,其中每一项都有一个图标和标题。
            items: navigationItem,
            // 目前的索引(`currentIndex`)属性,当前活动项的项目索引。
            currentIndex: _selectedIndex,
            // 固定颜色(`fixedColor`)属性,当BottomNavigationBarType.fixed时所选项目的颜色。
            fixedColor: Color(0xffFE7C30),
            // 在点击(`onTap`)属性,点击项目时调用的回调。
            onTap: _onItemTapped,
            // 定义底部导航栏(`BottomNavigationBar`)组件的布局和行为。
            type: BottomNavigationBarType.fixed,
          ),
    

    运行代码,实现效果如下面的图片。

    页面的状态被保持了下来

    展开全文
  • 状态保持因为 http 是一种无状态协议,浏览器请求服务器是无状态的。无状态:指一次用户请求时,浏览器、服务器无法知道之前这个用户做过什么,每次请求都是一次新的请求。无状态原因:浏览器与服务器是使用 socket ...

    状态保持

    • 因为 http 是一种无状态协议,浏览器请求服务器是无状态的。
    • 无状态:指一次用户请求时,浏览器、服务器无法知道之前这个用户做过什么,每次请求都是一次新的请求。
    • 无状态原因:浏览器与服务器是使用 socket 套接字进行通信的,服务器将请求结果返回给浏览器之后,会关闭当前的 socket 连接,而且服务器也会在处理页面完毕之后销毁页面对象。
    • 有时需要保持下来用户浏览的状态,比如用户是否登录过,浏览过哪些商品等
    • 实现状态保持主要有两种方式:
      • 在客户端存储信息使用Cookie
      • 在服务器端存储信息使用Session

    无状态协议:

    1. 协议对于事务处理没有记忆能力
    2. 对同一个 url 请求没有上下文关系
    3. 每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求是无直接关系的,它不会受前面的请求应答情况直接影响,也不会直接影响后面的请求应答情况
    4. 服务器中没有保存客户端的状态,客户端必须每次带上自己的状态去请求服务器
    5. 人生若只如初见

    状态举例:

    • 有状态:
      • A:你今天中午吃的啥?
      • B:吃的大盘鸡。
      • A:味道怎么样呀?
      • B:还不错,挺好吃的。
    • 无状态:
      • A:你今天中午吃的啥?
      • B:吃的大盘鸡。
      • A:味道怎么样呀?
      • B:???啊?啥?啥味道怎么样?
    • 所以需要cookie这种东西:
      • A:你今天中午吃的啥?
      • B:吃的大盘鸡。
      • A:你今天中午吃的大盘鸡味道怎么样呀?
      • B:还不错,挺好吃的。

    Cookie

    • Cookie:指某些网站为了辨别用户身份、进行会话跟踪而储存在用户本地的数据(通常经过加密)。
      • 复数形式Cookies。
      • Cookie最早是网景公司的前雇员Lou Montulli在1993年3月的发明。
      • Cookie是由服务器端生成,发送给客户端浏览器,浏览器会将Cookie的key/value保存,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。
      • Cookie的key/value可以由服务器端自己定义。
    • 应用
      • 最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookie的功用。
      • 网站的广告推送,经常遇到访问某个网站时,会弹出小窗口,展示我们曾经在购物网站上看过的商品信息。
      • 购物车,用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入Cookie,以便在最后付款时提取信息。
    • 提示

      • Cookie是存储在浏览器中的一段纯文本信息,建议不要存储敏感信息如密码,因为电脑上的浏览器可能被其它人使用
      • Cookie基于域名安全,不同域名的Cookie是不能互相访问的
        • 如访问itcast.cn时向浏览器中写了Cookie信息,使用同一浏览器访问baidu.com时,无法访问到itcast.cn写的Cookie信息
        • 浏览器的同源策略
      • 当浏览器请求某网站时,会将本网站下所有Cookie信息提交给服务器,所以在request中可以读取Cookie信息

    设置cookie

    from flask imoprt Flask,make_response
    @app.route('/cookie')
    def set_cookie():
        resp = make_response('this is to set cookie')
        resp.set_cookie('username', 'itcast')
        return resp
    

    • 设置过期时间
    @app.route('/cookie')
    def set_cookie():
        response = make_response('hello world')
        response.set_cookie('username', 'itheima', max_age=3600)
        return response
    

    获取cookie

    from flask import Flask,request
    #获取cookie
    @app.route('/request')
    def resp_cookie():
        resp = request.cookies.get('username')
        return resp
    

    Session

    • 对于敏感、重要的信息,建议要存储在服务器端,不能存储在浏览器中,如用户名、余额、等级、验证码等信息
    • 在服务器端进行状态保持的方案就是Session
    • Session依赖于Cookie

    session数据的获取

    session:请求上下文对象,用于处理http请求中的一些数据内容

    @app.route('/index1')
    def index1():
        session['username'] = 'itcast'
        return redirect(url_for('index'))
    @app.route('/')
    def index():
        return session.get('username')
    

    记得设置secret_key: app.secret_key = 'itheima'secret_key的作用:https://segmentfault.com/q/1010000007295395


    展开全文
  • Vue登录注册,并保持登录状态

    千次阅读 2018-10-28 17:09:28
    关于vue登录注册,并保持登录状态,是vue玩家必经之路,网上也有很多的解决方法,但是有一些太过于复杂,新手可能会看的一脸懵逼,现在给大家介绍一种我自己写项目在用而且并不难理解的一种方法。 项目中有一些路由...

    关于vue登录注册,并保持登录状态,是vue玩家必经之路,网上也有很多的解决方法,但是有一些太过于复杂,新手可能会看的一脸懵逼,现在给大家介绍一种我自己写项目在用而且并不难理解的一种方法。

    项目中有一些路由是需要登录才可以进入的,比如首页,个人中心等等
    有一些路由是不需要登录就可以进入,比如登录页,注册页,忘记密码等等
    那如何判断路由是否需要登录呢?就要在路由JS里面做文章

    在router.js中添加meta区分

    比如登录注册页面,不需要登录即可进入,那么我们把meta中的isLogin标志设置为false

    {
      //登录
      path: '/login',
      component: login,
      meta: {
        isLogin: false
      }
    },
    {
      //注册
      path: '/register',
      component: register,
      meta: {
        isLogin: false
      }
    },

    而在首页我们需要登录才能进入,那么我们把meta中的isLogin标志设置为true

    {
      //首页
      path: '/home',
      component: home,
      meta: {
        isLogin: true
      },
    }

    这样我们就为进入各个路由是否需要登录做了区分。

    接下来我们在login.vue中修改登录后状态

    我们使用axios向后台发起登录请求

    this.$axios.post("/xxx/login", {user:name,password:pwd})
        .then(data => {
            //登录失败,先不讨论
            if (data.data.status != 200) {
              //iViewUi的友好提示
              this.$Message.error(data.data.message);
            //登录成功
            } else {
              //设置Vuex登录标志为true,默认userLogin为false
              this.$store.dispatch("userLogin", true);
              //Vuex在用户刷新的时候userLogin会回到默认值false,所以我们需要用到HTML5储存
              //我们设置一个名为Flag,值为isLogin的字段,作用是如果Flag有值且为isLogin的时候,证明用户已经登录了。
              localStorage.setItem("Flag", "isLogin");
              //iViewUi的友好提示
              this.$Message.success(data.data.message);
              //登录成功后跳转到指定页面
              this.$router.push("/home");
            }
     });

    Vuex里面我是这样写的(如果项目不需要Vuex,那么直接使用HTML5储存就可以了):

    export const store = new Vuex.Store({
      // 设置属性
      state: {
        isLogin: false,
      },
    
      // 获取属性的状态
      getters: {
        //获取登录状态
        isLogin: state => state.isLogin,
      },
    
      // 设置属性状态
      mutations: {
        //保存登录状态
        userStatus(state, flag) {
          state.isLogin = flag
        },
      },
    
      // 应用mutations
      actions: {
        //获取登录状态
        setUser({commit}, flag) {
          commit("userStatus", flag)
        },
      }
    })

    重点来了~,在mian.js里

    router.beforeEach((to, from, next) => {
    
      //获取用户登录成功后储存的登录标志
      let getFlag = localStorage.getItem("Flag");
    
      //如果登录标志存在且为isLogin,即用户已登录
      if(getFlag === "isLogin"){
    
        //设置vuex登录状态为已登录
        store.state.isLogin = true
        next()
    
        //如果已登录,还想想进入登录注册界面,则定向回首页
        if (!to.meta.isLogin) {
           //iViewUi友好提示
          iView.Message.error('请先退出登录')
          next({
            path: '/home'
          })
        }
      
      //如果登录标志不存在,即未登录
      }else{
    
        //用户想进入需要登录的页面,则定向回登录界面
        if(to.meta.isLogin){
          next({
            path: '/login',
          })
          //iViewUi友好提示
          iView.Message.info('请先登录')
        //用户进入无需登录的界面,则跳转继续
        }else{
          next()
        }
    
      }
    
    });
    
    router.afterEach(route => {
      window.scroll(0, 0);
    });

    这样就已经完成了Vue的登录注册,当用户关闭浏览器或者第二天再次进入网站,用户依旧可以保持着登录的状态直到用户手动退出登录。

    Tips:用户退出只需要localStorage.removeItem("Flag")即可

    原文https://segmentfault.com/a/1190000016040068

    展开全文
  • android 保持屏幕唤醒状态

    千次阅读 2013-04-01 16:28:29
    android保持屏幕唤醒状态   protected void onCreate(Bundle icicle) {  super.onCreate(icicle);  getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);  } 简单来说就是把...
    android保持屏幕唤醒状态 
      protected void onCreate(Bundle icicle) { 
    	super.onCreate(icicle); 
    	getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
    	}
    简单来说就是把getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);加进onCreate里面,用WindowManager来管理窗口。
    既然是加在Activity的onCreate里,不用试验也知道肯定是针对当前一个Activity的。如果想让所有的Activity都保持唤醒状态怎么办呢?
    其实如果用到我之前提到过的BaseActivity这一招得话就可以轻松解决了:
    在BaseActivity以及,如果有的话BaseTabActivity,BaseMapActivity等的onCreate中都加入:
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    就可以保证继承他们的Activity都继承保持屏幕唤醒了。
    自己试验了一下,效果还是非常好的。
    
    
    文章来自:http://blog.sina.com.cn/s/blog_588508f801010ivk.html
    总重原著,好好学习
    展开全文
  • 怎样每天保持饱满的精神状态

    千次阅读 2015-12-20 21:49:13
    怎样才能每天保持饱满的精神状态去工作和学习呢? 相信这是很多人都想去做到的事情,我自己也正在摸索当中。下面就写一些自己的心得,顺便把自己今年剩余的这点时间做一个简单有效的规划。 最近很多事情牵绊住了我...
  • 这几天在做公司的项目,有这样一个需求,就是在listView里,点击item子项的时候需要保持item子项的选中状态,上网搜了一些资料,最后也实现了。现在就记录下来,一方面方便以后自己回顾复习温故,另外也和大家分享...
  • 这几天工作中需要用到这功能,因为我做后端的,所以和往常一样,前端的东西我都会...所以自己打算写一个,虽然我产专业的前端,但还是略知一二。 使用的技术 localStorage.setItem(key,val); localStorage.getIt...
  • 现状,当不管电源适配器(充电器)有没有和电脑连接,右上的电池图标一直保持充电状态,这个问题的解决 解决方案: 可以做一下smc和pram reset; 1,关机,断开所有数据线和电源线。 2,在关机的情况下同时按住...
  • ASP.NET保持用户状态的九种选择

    千次阅读 2004-10-24 22:15:00
    2003-06-10■陶刚编译■yesky摘要:ASP.NET为保持用户请求之间的数据提供了多种不同的途径。你可以使用Application对象、cookie、hidden fields、Sessions或Cache对象,以及它们的大量的方法。决定什么时候使用它们...
  • 在微信小程序开发中,由wx.request()发起的每次请求对于服务端来说都是不同的一次会话,... 注意,这里的session不是小程序维护的那个通过wx.login()方法维护的session,而是我们自己的服务端的session。 由于正常...
  • ASP.Net中的四种状态保持机制

    千次阅读 2012-07-20 00:21:42
    这几天在学ASP.Net (就是传说中最难的...今天来说说ASP.Net中的4种状态保持机制 状态保持机制?神马意思? 别急 且听我下面慢慢道来 每个人上网可多有过这样的情况  当我们登陆某个网站时 在登陆的旁边会有一个
  • 如何你的App永远在后台存活:对Android进程守护、闹钟后台被杀死的研究。 最近公司要求要做一个提醒功能,一说到提醒,那肯定就和闹钟差不多的意思,那么肯定就要用到AlarmManager。 但是,我们知道,android...
  • 首先系统偏好设置 - 节能 里按自己需要选择,这里不再赘述,很多帖子解释都很清楚。 但是很多朋友不管怎么设置这里,电脑还是会进入休眠、自动关闭下载,所以重点来了。 1、打开系统偏好设置 - 安全与隐私 - 通用...
  • TreeView父子联动效果保持节点状态一致

    万次阅读 热门讨论 2005-02-02 18:01:00
    还有一个要求就是:如果可以实现三态树则更(这个有点难,本文中不予讨论)。本文将详细介绍前面要求1。  首先我们要庆幸微软的这个TreeView控件是开源的,不论是客户端代码还是服务器端代码您都可以轻松获得,...
  • airflow 被调度后,一直处于 running 状态假死,而且日志打印不完全,从某一行以下就不会打印日志了。 2. 错误原因 经过查找源码中从这一行打印的日志来看,因为在日志里面输出了中文的字符串(包括中文的括号...
  • 的,那么问题来了:先说web端1.因为一般网页主需要记住7天密码(或者稍微更长)的功能就可以了,可以使用cookie实现,而且shiro也提供了记住密码的功能,在服务器端session不需要保存过长时间。再说app端2...
  • 这可难不倒我,当然知道怎么配置,刷刷的就配了。 Session Options -> Terminal -> Anti-idle -> Send protol NO-OP,设置时间为60s,保存搞定收工。 满心欢喜,以为搞定了。没想到吃个晚饭回来,又断开了。这下...
  • 在这篇博客中,我将结合网上的资料以及自己的使用经验来实现一个底部菜单,解决了很多网友提出的各种问题,在文章中,我只贴出部分的实现代码以及效果图,免得占用大量的篇幅,大家看的不爽,在最后我会给出整个...
  • android状态栏一体化(沉浸式状态栏)

    万次阅读 多人点赞 2014-12-01 09:56:22
    在android kitkat 有一个新的特性可以设置手机状态栏的背景,手机整个界面的风格保持一致,看起来非常清爽,在今年的google i/o上的android l默认就是这种风格。来现在看我们怎么加上这个酷黑狂拽掉渣天的功能怎么...
  • 线程的状态和基本操作

    千次阅读 多人点赞 2019-10-03 23:36:42
    在上一篇博客中并发编程的优...文章目录创建线程的四种方式线程的状态和生命周期线程状态的基本操作interruptedjoinsleepyield进程和线程线程优先级守护线程和用户线程守护线程详解线程死锁认识线程死锁如何避免线...
  • 操作系统进程状态状态转换详解

    千次阅读 多人点赞 2019-11-01 10:28:55
    进程的状态的转换与PCB详解 ​ 返回主目录 ​ 之前的有博文对进程和线程的区别进行了详细的介绍,并且说明了引入进程的目的是为了能够使程序并发的执行,并且可以对并发执行的程序加以描述和控制。这篇博文,我们...
  • TCP连接的状态详解以及故障排查

    万次阅读 多人点赞 2014-08-20 07:06:38
    我们通过了解TCP各个状态,可以排除和定位网络或系统故障时大有帮助。(总结网络上的内容) 1、TCP状态 了解TCP之前,先了解几个命令: linux查看tcp的状态命令: 1)、netstat -nat 查看TCP各个状态的数量 2)...
  • TCP中的三次握手,四次挥手是我们所熟知的,可是,我们熟悉里面的各种状态吗??? (SYN_SENT, ESTABLISHED, CLOSE_WAIT.............),试问一句,我们了解里面的状态转化吗??? 1,大家先看一个简单的...
  • 一,系统设计:有状态、无状态惯例,先看栗子网站登录校验,很普通的一个功能 对于这个功能我们要如何实现?先分析一下登录校验是个啥意思 举个栗子,比如我们在登陆页输入用户名密码,登录了社交网站 这时候想去...
  • 我个人初学对于自己管理比较理解,对于父控件管理理解起来有点困难,所以只能多看多学。这里写一下两种状态管理的方式和代码,加深自己的印象,尤其是父控件管理方式。 项目说明:两种方式实现一个容器盒子,点击...
  • 状态会话Bean与无状态会话Bean

    千次阅读 2013-03-20 09:20:37
     可以在不同的方法调用间保持针对各个客户端的状态  与客户端的联系必须被维持,这样做开销要大一些  有状态也可以这样理解,它存在存储能力,也就是说至少有一个属性来标识它目前的状态,例如: public class...
  • 帧同步和状态同步(一)

    千次阅读 2017-11-01 09:26:35
    帧同步什么是帧同步:帧同步常被RTS(即时战略)游戏常采用。在游戏中同步的是玩家的操作指令,操作指令包含当前的帧索引。...(一般游戏中都设计随机数的使用, 通过同步随机数种子,可以保持随机数一致性)客户端上
  • 游戏后台状态同步与帧同步

    千次阅读 2017-11-11 23:19:12
    一般的流程是客户端上传操作到服务器,服务器收到后计算游戏行为的结果,即技能逻辑,战斗计算都由服务器运算,然后以广播的方式下发游戏中各种状态,客户端收到状态后,更新自己本地的动作状态、Buff状态,位置等就...
  • iOS应用程序状态切换相关

    万次阅读 热门讨论 2011-12-25 22:34:06
    一、iOS应用程序状态机一共有五种状态: 1. Not running:应用还没有启动,或者应用正在运行但是途中被系统停止。 2. Inactive:当前应用正在前台运行,但是并不接收事件(当前或许正在执行其它代码)。一般每当应用...
  • PowerDesigner16 状态

    千次阅读 多人点赞 2017-10-21 20:25:01
    状态图(Statechart Diagram)主要用于描述一个对象在其生存期间的动态行为,表现为一个对象所经历的状态序列,引起状态转移的事件(Event),以及因状态转移而伴随的动作(Action)。一般可以用状态机对一个对象的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 467,443
精华内容 186,977
关键字:

如何让自己保持好状态