首页 文章 精选 留言 我的

精选列表

搜索[android things],共10000篇文章
优秀的个人博客,低调大师

【Android进阶学习】屏蔽,捕获Home键

在Level5以上(包含)中,Activity类中的方法:public void onAttachedToWindow ()就能对Home键进行捕获。具体代码如下: MainActivity.java packagecom.lingdududu.test; importandroid.app.Activity; importandroid.os.Bundle; importandroid.view.KeyEvent; importandroid.view.WindowManager; importandroid.widget.Toast; publicclassMainActivityextendsActivity{ /**Calledwhentheactivityisfirstcreated.*/ privatebooleancatchHomeKey=false; publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override publicvoidonAttachedToWindow(){ //TODOAuto-generatedmethodstub if(!catchHomeKey){ this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); } super.onAttachedToWindow(); } @Override publicbooleanonKeyDown(intkeyCode,KeyEventevent){ //TODOAuto-generatedmethodstub if(keyCode==KeyEvent.KEYCODE_HOME){ Toast.makeText(MainActivity.this,"你点击了HOME键",Toast.LENGTH_LONG).show(); } returnsuper.onKeyDown(keyCode,event); } } 当我们点击Home键的时候,程序并没有回到主界面,而是停留在当前的页面,并且能捕获到Home键,调用Toast显示信息。 效果图: 本文转自 lingdududu 51CTO博客,原文链接:http://blog.51cto.com/liangruijun/732092

优秀的个人博客,低调大师

Android:ANR、线程间通讯、Handler、Message

场景:点击按钮1进行下载,显示进度条进度变化,10秒后下载完成,进度条消失;点击按钮2完成更新,出现转动进度条,5秒后更新完毕进度条消失。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 public class MainActivity extends Activity implements OnClickListener { TextView textView = null ; private ProgressBar mProgress_yuan; private ProgressBar mProgress_jindu; private final int MSG_WHAT_DOWNLOAD = 1 ; private final int MSG_WHAT_UPDATE = 2 ; private final int MSG_WHAT_PROGRESS = 3 ; private Handler mHandler = new Handler() // Handler运行于main线程,在main线程接收消息 { @Override public void handleMessage(Message msg) // 重写handleMessage方法 { switch (msg.what) { case MSG_WHAT_DOWNLOAD: Data data = (Data) msg.obj; textView.setText(data.toString()); mProgress_jindu.setVisibility(View.GONE); // 下载完成后,进度条消失 break ; case MSG_WHAT_UPDATE: String str = (String) msg.obj; textView.setText(str); mProgress_yuan.setVisibility(View.GONE); // 更新完毕后,圆形进度框消失 break ; case MSG_WHAT_PROGRESS: int arg = msg.arg1; mProgress_jindu.setProgress(arg); // 每次接收消息,更新进度条 break ; default : break ; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.button1).setOnClickListener( this ); findViewById(R.id.button2).setOnClickListener( this ); textView = (TextView) findViewById(R.id.textView1); mProgress_yuan = (ProgressBar) findViewById(R.id.progressBar1); mProgress_jindu = (ProgressBar) findViewById(R.id.progressBar2); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true ; } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button1: btn1Click(); break ; case R.id.button2: btn2Click(); break ; default : break ; } } private void btn1Click() // 点击下载,10秒后下载完成,进度条消失 { mProgress_jindu.setVisibility(View.VISIBLE); // 点击时进度条显示(xml设置默认隐藏) new Thread() { @Override public void run() { Message message = new Message(); message.what = MSG_WHAT_DOWNLOAD; // 设置标识 message.obj = download(); // 将返回结果赋给msg,调用下载方法时同时发消息更新进度条 mHandler.sendMessage(message); // 通过Handler传递msg } }.start(); } private void btn2Click() // 点击更新,圆形进度条转动,3秒后更新完成,进度条消失 { mProgress_yuan.setVisibility(View.VISIBLE); new Thread() { @Override public void run() { try { Thread.sleep( 3000 ); String str = update(); //Message msg = mHandler.obtainMessage(what, obj) //下面部分可以采用上面的方法优化 Message msg = new Message(); msg.what = MSG_WHAT_UPDATE; msg.obj = str; mHandler.sendMessage(msg); } catch (InterruptedException e) { e.printStackTrace(); } } }.start(); } private Data download() { for ( int i = 0 ; i < 10 ; i++) // 模拟下载进度过程 { //Message msg = new Message(); Message msg = mHandler.obtainMessage(); //从系统的资源池获取复用msg,避免重复创建msg对象 msg.what = MSG_WHAT_PROGRESS; msg.arg1 = i * 10 ; mHandler.sendMessage(msg); // 每次进度发消息给main线程更新进度条 try { Thread.sleep( 1000 ); // 10秒后下载完成 } catch (InterruptedException e) { e.printStackTrace(); } } Data data = new Data( "下载完成!" , 12 ); return data; } private String update() { return "更新完成!" ; } class Data { String name; int num; public Data(String name, int num) { super (); this .name = name; this .num = num; } @Override public String toString() { return "data [name=" + name + ", num=" + num + "]" ; } } } 本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1206262,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android涉及到的设计模式

转载地址:http://blog.csdn.net/dengshengjin2234/article/details/8502097 1、适配器模式:ListView或GridView的Adapter 简介:不同的数据提供者使用一个适配器来向一个相同的客户提供服务。 2、建造者模式:AlertDialog.Builder 简介:可以分步地构造每一部分。 3、命令模式:Handler.post后Handler.handleMessage 简介:把请求封装成一个对象发送出去,方便定制、排队、取消。 4、享元模式:Message.obtainMessage通过重用Message对象来避免大量的Message对象被频繁的创建和销毁。 简介:运用共享技术有效地支持大量细粒度的对象。 5、迭代器模式:如通过Hashtable.elements方法可以得到一个Enumeration,然后通过这个Enumeration访问Hashtable中的数据,而不用关心Hashtable中的数据存放方式。 简介:提供一个方法顺序访问数据集合中的所有数据而又不暴露对象的内部表示。 6、备忘录模式:Activity的onSaveInstanceState和onRestoreInstanceState就是通过Bundle这种序列化的数据结构来存储Activity的状态,至于其中存储的数据结构,这两个方法不用关心 简介:不需要了解对象的内部结构的情况下备份对象的状态,方便以后恢复。 7、观察者模式:我们可以通过BaseAdapter.registerDataSetObserver和 BaseAdapter.unregisterDataSetObserver两方法来向BaseAdater注册、注销一个 DataSetObserver。这个过程中,DataSetObserver就是一个观察者,它一旦发现BaseAdapter内部数据有变量,就会通 过回调方法DataSetObserver.onChanged和DataSetObserver.onInvalidated来通知 DataSetObserver的实现类。事件通知也是观察者模式 简介:一个对象发生改变时,所有信赖于它的对象自动做相应改变。 8、原型模式:比如我们需要一张Bitmap的几种不同格式:ARGB_8888、RGB_565、ARGB_4444、ALAPHA_8等。那我 们就可以先创建一个ARGB_8888的Bitmap作为原型,在它的基础上,通过调用Bitmap.copy(Config)来创建出其它几种格式的 Bitmap。另外一个例子就是Java中所有对象都有的一个名字叫clone的方法,已经原型模式的代名词了 简介:在系统中要创建大量的对象,这些对象之间具有几乎完全相同的功能,只是在细节上有一点儿差别。 9、代理模式:类似于ios开发的delegate委托模式,所有的AIDL都一个代理模式的例子。假设一个Activity A去绑定一个Service S,那么A调用S中的每一个方法其实都是通过系统的Binder机制的中转,然后调用S中的对应方法来做到的。Binder机制就起到了代理的作用。 简介:为其他对象提供一种代理以控制对这个对象的访问。 10、状态模式:View.onVisibilityChanged方法,就是提供了一个状态模式的实现,允许在View的visibility发生改变时,引发执行onVisibilityChanged方法中的动作。 简介:状态发生改变时,行为改变。 11、策略模式: 举例:Java.util.List就是定义了一个增(add)、删(remove)、改(set)、查(indexOf)策略,至于实现这个策略 的ArrayList、LinkedList等类,只是在具体实现时采用了不同的算法。但因为它们策略一样,不考虑速度的情况下,使用时完全可以互相替换 使用。 简介:定义了一系列封装了算法、行为的对象,他们可以相互替换。 12、调解者模式 简介:一个对象的某个操作需要调用N个对象的M个方法来完成时,把这些调用过程封装起来,就成了一个调解者 举例:如Resource.getDrawable方法的实现逻辑是这样的:创建一个缓存来存放所有已经加载过的,如果getDrawable中传 入的id所对应的Drawable以前没有被加载过,那么它就会根据id所对应的资源类型,分别调用XML解析器生成,或者通过读取包中的图片资源文件来 创建Drawable。 而Resource.getDrawable把涉及到多个对象、多个逻辑的操作封装成一个方法,就实现了一个调解者的角色。 13、抽象工厂模式 DAO与Service的使用 本文转自demoblog博客园博客,原文链接http://www.cnblogs.com/0616--ataozhijia/p/3718337.html如需转载请自行联系原作者 demoblog

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册