当前位置:  编程技术>移动开发
本页文章导读:
    ▪surfaceView 与View 的差异        surfaceView 与View 的区别 如果你的游戏不吃CPU,用View就比较好,符合标准Android操作方式,由系统决定刷新surface的时机。但如果很不幸的,你做不到不让你的程序吃CPU,你就只好使用SurfaceView来.........
    ▪ 获取按键键值的工具种        获取按键键值的工具类 获取当前按下的按键键值,直接新建工程,把这段代码放到主Activity里就行了。   /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceSta.........
    ▪ 最简要的广播和广播接收器,纯代码形式       最简洁的广播和广播接收器,纯代码形式 这个东西用于通信还是比较方便的,呵呵,那就来个最简洁的吧:   发送端,即Broadcast:   private String BROADCAST_ACTION_SEARCH_PROCESS = "dingran.SearchProcess";  .........

[1]surfaceView 与View 的差异
    来源: 互联网  发布时间: 2014-02-18
surfaceView 与View 的区别

如果你的游戏不吃CPU,用View就比较好,符合标准Android操作方式,由系统决定刷新surface的时机。
但如果很不幸的,你做不到不让你的程序吃CPU,你就只好使用SurfaceView来强制刷新surface了,不然系统的UI进程很可能抢不过你那些吃CPU的线程。

当然其实不止这两种方法来刷新Surface的,这两种只是纯java应用比较常见的方法。

SurfaceView和View最本质的区别在于,surfaceView是在一个新起的单独线程中可以重新绘制画面而View必须在UI的主线程中更新画面。
那么在UI的主线程中更新画面 可能会引发问题,比如你更新画面的时间过长,那么你的主UI线程会被你正在画的函数阻塞。那么将无法响应按键,触屏等消息。

当使用surfaceView 由于是在新的线程中更新画面所以不会阻塞你的UI主线程。但这也带来了另外一个问题,就是事件同步。比如你触屏了一下,你需要surfaceView中thread处理,一般就需要有一个event queue的设计来保存touch event,这会稍稍复杂一点,因为涉及到线程同步。

所以基于以上,根据游戏特点,一般分成两类。

1 被动更新画面的。比如棋类,这种用view就好了。因为画面的更新是依赖于 onTouch 来更新,可以直接使用 invalidate。 因为这种情况下,这一次Touch和下一次的Touch需要的时间比较长些,不会产生影响。

2 主动更新。比如一个人在一直跑动。这就需要一个单独的thread不停的重绘人的状态,避免阻塞main UI thread。所以显然view不合适,需要surfaceView来控制。


    
[2] 获取按键键值的工具种
    来源: 互联网  发布时间: 2014-02-18
获取按键键值的工具类

获取当前按下的按键键值,直接新建工程,把这段代码放到主Activity里就行了。

 

/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.main);
        
        LinearLayout ll = new LinearLayout(this);
        ll.setBackgroundColor(Color.BLUE);
        ll.setOrientation(LinearLayout.VERTICAL);
        
        TextView tv = new TextView(this);
        tv.setText("键值测试程序,请按键开始测试");
        tv.setTextColor(Color.RED);
        ll.addView(tv);
        
        tv2 = new TextView(this);
        tv2.setTextColor(Color.RED);
        ll.addView(tv2);
        
        this.setContentView(ll);
        
    }
    
    TextView tv2;

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {

        tv2.setText("您按下的按键的键值是:"+keyCode);
        
        return super.onKeyDown(keyCode, event);
    }
 

    
[3] 最简要的广播和广播接收器,纯代码形式
    来源: 互联网  发布时间: 2014-02-18
最简洁的广播和广播接收器,纯代码形式

这个东西用于通信还是比较方便的,呵呵,那就来个最简洁的吧:

 

发送端,即Broadcast:

 

private String BROADCAST_ACTION_SEARCH_PROCESS = "dingran.SearchProcess";

 

Intent intent = new Intent();
intent.setAction(BROADCAST_ACTION_SEARCH_PROCESS);

// 把需要传递的数据放到intent里
this.sendBroadcast(intent);

 

接收端,即BroadcastReceiver:

 

private String BROADCAST_ACTION_SEARCH_PROCESS = "dingran.SearchProcess";

 

private MyBroadCastReceiver mbcr = new MyBroadCastReceiver();

 

private class MyBroadCastReceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {

          // 这里就可以接收intent了,解析你需要的数据
    }

}

 

接收端需要注册,我们从代码注册方便,就从onCreat里吧:

 

IntentFilter inf = new IntentFilter();

inf.addAction(BROADCAST_ACTION_SEARCH_PROCESS);
this.registerReceiver(mbcr, inf);

 


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3