⬗ Android工作总结 ⬗
当系统检测到一个NFC标签的时候,他会自动去寻找最合适的activity去处理这个intent.
NFC发出的这个Intent将会有三种action:
ACTION_NDEF_DISCOVERED:当系统检测到tag中含有NDEF格式的数据时,且系统中有activity声明可以接受包含NDEF数据的Intent的时候,系统会优先发出这个action的intent。
ACTION_TECH_DISCOVERED:当没有任何一个activity声明自己可以响应ACTION_NDEF_DISCOVERED时,系统会尝试发出TECH的intent.即便你的tag中所包含的数据是NDEF的,但是如果这个数据的MIMEtype或URI不能和任何一个activity所声明的想吻合,系统也一样会尝试发出tech格式的intent,而不是NDEF.
ACTION_TAG_DISCOVERED:当系统发现前两个intent在系统中无人会接受的时候,就只好发这个默认的TAG类型的
首先是权限:
例如:
NfcAdapter mAdapter = NfcAdapter.getDefaultAdapter(this);
接着是特殊功能限制:
这个生命可以让你的应用在googleplay上被声明使用者必须拥有nfc功能。
在activity的intent过滤xml声明中,你可以同时声明过滤这三种action.但是由之前所说,你应该知道系统在发送intent的时候是有优先级的,所以你最好清楚自己最想处理哪个。
1:过滤ACTION_TAG_DISCOVERED:
2:过滤ACTION_NDEF_DISCOVERED:
其中最重要的应该算是data的mimeType类型了,这个定义的越准确,intent指向你这个activity的成功率就越高,否则系统可能不会发出你想要的NDEF intent了。下面在讲如何使用NDEF写入NFC标签的时候会多举几个类型的例子。
3:过滤ACTION_TECH_DISCOVERED:
/res/xml下面创建一个过滤规则文件。名字任取,比如可以叫做nfc_tech_filter.xml。这个里面定义的是nfc实现的各种标准,每一个nfc卡都会符合多个不同的标准,个人理解为这些标准有些相互之间也是兼容的。你可以在检测到nfc标签后使用getTechList()方法来查看你所检测的tag到底支持哪些nfc标准。
一个nfc_tech_filter.xml中可以定义多个
在androidManifest文件中声明xml过滤的举例如下:
package o.Beam;import java.io.ByteArrayOutputStream;import java.nio.charset.Charset;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;import java.util.List;import java.util.Locale;import org.nfc.read.ParsedNdefRecord;import android.app.Activity;import android.app.AlertDialog;import android.app.PendingIntent;import ntent.DialogInterface;import ntent.Intent;import android.nfc.NdefMessage;import android.nfc.NdefRecord;import android.nfc.NfcAdapter;import android.nfc.Tag;import android..MifareClassic;import android..MifareUltralight;import android.os.Bundle;import android.os.Parcelable;import vider.Settings;import android.widget.TextView;public class MainActivity extends Activity { private static final DateFormat TIME_FORMAT = SimpleDateFormat .getDateTimeInstance(); private NfcAdapter mAdapter; private PendingIntent mPendingIntent; private NdefMessage mNdefPushMessage; private TextView promt; private AlertDialog mDialog; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); promt = (TextView) findViewById(R.mt); resolveIntent(getIntent()); mDialog = new AlertDialog.Builder(this).setNeutralButton(“Ok”, null) .create(); // 获取默认的NFC控制器 mAdapter = NfcAdapter.getDefaultAdapter(this); //拦截系统级的NFC扫描,例如扫描蓝牙 mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); mNdefPushMessage = new NdefMessage(new NdefRecord { newTextRecord(“”, Locale.ENGLISH, true) }); } @Override protected void onResume() { super.onResume(); if (mAdapter == null) { if (!mAdapter.isEnabled()) { showWirelessSettingsDialog(); } showMessage(R.string.error, R.string.no_nfc); promt.setText(“设备不支持NFC!”); return; } if (!mAdapter.isEnabled()) { promt.setText(“请在系统设置中先启用NFC功能!”); return; } if (mAdapter != null) { //隐式启动 mAdapter.enableForegroundDispatch(this, mPendingIntent, null, null); mAdapter.enableForegroundNdefPush(this, mNdefPushMessage); } } @Override protected void onPause() { super.onPause(); if (mAdapter != null) { //隐式启动 mAdapter.disableForegroundDispatch(this); mAdapter.disableForegroundNdefPush(this); } } //16进制字符串转换为String private String hexString = “0123456789ABCDEF”; public String decode(String bytes) { if (bytes.length() != 30) { return null; } ByteArrayOutputStream baos = new ByteArrayOutputStream( bytes.length() / 2); // 将每2位16进制整数组装成一个字节 for (int i = 0; i < bytes.length(); i += 2) baos.write((hexString.indexOf(bytes.charAt(i)) << 4 | hexString .indexOf(bytes.charAt(i + 1)))); return new String(baos.toByteArray()); } // 字符序列转换为16进制字符串 private static String bytesToHexString(byte src, boolean isPrefix) { StringBuilder stringBuilder = new StringBuilder(); if (isPrefix == true) { stringBuilder.append(“0x”); } if (src == null || src.length <= 0) { return null; } char buffer = new char; for (int i = 0; i < src.length; i++) { buffer = Character.toUpperCase(Character.forDigit( (src >>>4) & 0x0F, 16)); buffer = Character.toUpperCase(Character.forDigit(src & 0x0F, 16)); System.out.println(buffer); stringBuilder.append(buffer); } return stringBuilder.toString(); } private void showMessage(int title, int message) { mDialog.setTitle(title); mDialog.setMessage(getText(message)); (); } private NdefRecord newTextRecord(String text, Locale locale, boolean encodeInUtf8) { byte langBytes = locale.getLanguage().getBytes( Charset.forName(“US-ASCII”)); Charset utfEncoding = encodeInUtf8 ? Charset.forName(“UTF-8”) : Charset .forName(“UTF-16”); byte textBytes = text.getBytes(utfEncoding); int utfBit = encodeInUtf8 ? 0 : (1 << 7); char status = (char) (utfBit + langBytes.length); byte data = new byte; data = (byte) status; System.arraycopy(langBytes, 0, data, 1, langBytes.length); System.arraycopy(textBytes, 0, data, 1 + langBytes.length, textBytes.length); return new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, new byte, data); } private void showWirelessSettingsDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage(R.string.nfc_disabled); builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int i) {Intent intent = new Intent( Settings.ACTION_WIRELESS_SETTINGS);startActivity(intent); } }); builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int i) {finish(); } }); builder.create().show(); return; } //初步判断是什么类型NFC卡 private void resolveIntent(Intent intent) { String action = intent.getAction(); if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action) || NfcAdapter.ACTION_TECH_DISCOVERED.equals(action) || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) { Parcelable rawMsgs = intent .getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); NdefMessage msgs; if (rawMsgs != null) { msgs = new NdefMessage; for (int i = 0; i < rawMsgs.length; i++) { msgs = (NdefMessage) rawMsgs; } } else { // Unknown tag type byte empty = new byte; byte id = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID); Parcelable tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); byte payload = dumpTagData(tag).getBytes(); NdefRecord record = new NdefRecord(NdefRecord.TNF_UNKNOWN,empty, id, payload); NdefMessage msg = new NdefMessage(new NdefRecord { record }); msgs = new NdefMessage { msg }; } // Setup the views buildTagViews(msgs); } } //一般公家卡,扫描的信息 private String dumpTagData(Parcelable p) { StringBuilder sb = new StringBuilder(); Tag tag = (Tag) p; byte id = tag.getId(); sb.append(“Tag ID (hex): ”).append(getHex(id)).append(“\n”); sb.append(“Tag ID (dec): ”).append(getDec(id)).append(“\n”); sb.append(“ID (reversed): ”).append(getReversed(id)).append(“\n”); String prefix = “android..”; sb.append(“Technologies: ”); for (String tech : tag.getTechList()) { sb.append(tech.substring(prefix.length())); sb.append(“, ”); } sb.delete(sb.length() - 2, sb.length()); for (String tech : tag.getTechList()) { if (tech.equals(MifareClassic.class.getName())) { sb.append('\n'); MifareClassic mifareTag = MifareClassic.get(tag); String type = “Unknown”; switch (mifareTag.getType()) { case MifareClassic.TYPE_CLASSIC: type = “Classic”; break; case MifareClassic.TYPE_PLUS: type = “Plus”; break; case MifareClassic.TYPE_PRO: type = “Pro”; break; } sb.append(“Mifare Classic type: ”); sb.append(type); sb.append('\n'); sb.append(“Mifare size: ”); sb.append(mifareTag.getSize() + “ bytes”); sb.append('\n'); sb.append(“Mifare sectors: ”); sb.append(mifareTag.getSectorCount()); sb.append('\n'); sb.append(“Mifare blocks: ”); sb.append(mifareTag.getBlockCount()); } if (tech.equals(MifareUltralight.class.getName())) { sb.append('\n'); MifareUltralight mifareUlTag = MifareUltralight.get(tag); String type = “Unknown”; switch (mifareUlTag.getType()) { case MifareUltralight.TYPE_ULTRALIGHT: type = “Ultralight”; break; case MifareUltralight.TYPE_ULTRALIGHT_C: type = “Ultralight C”; break; } sb.append(“Mifare Ultralight type: ”); sb.append(type); } } return sb.toString(); } private String getHex(byte bytes) { StringBuilder sb = new StringBuilder(); for (int i = bytes.length - 1; i >= 0; --i) { int b = bytes & 0xff; if (b < 0x10) sb.append('0'); sb.append(Integer.toHexString(b)); if (i >0) { sb.append(“ ”); } } return sb.toString(); } private long getDec(byte bytes) { long result = 0; long factor = 1; for (int i = 0; i < bytes.length; ++i) { long value = bytes & 0xffl; result += value * factor; factor *= 256l; } return result; } private long getReversed(byte bytes) { long result = 0; long factor = 1; for (int i = bytes.length - 1; i >= 0; --i) { long value = bytes & 0xffl; result += value * factor; factor *= 256l; } return result; } //显示NFC扫描的数据 private void buildTagViews(NdefMessage msgs) { if (msgs == null || msgs.length == 0) { return; } // Parse the first message in the list // Build views for all of the sub records Date now = new Date(); List
records = NdefMessageParser.parse(msgs); final int size = records.size(); for (int i = 0; i < size; i++) { TextView timeView = new TextView(this); timeView.setText(TIME_FORMAT.format(now)); ParsedNdefRecord record = records.get(i); promt.append(record.getViewText()); } } //获取系统隐式启动的 @Override public void onNewIntent(Intent intent) { setIntent(intent); resolveIntent(intent); }}
2、androidManifest配置
⬗ Android工作总结 ⬗
在Escips进行编译仿真时,如果有错误 logcat会出很多行红字,怎样从红字中获取有用信息
一般的话红字第一行,就能说明错误原因。还有个笨方法是 挨行双击。
一般的错误都会显示在第二行红字里面,你选中后点击右键
选择“Filter similar meages...”,就可以查看复制出log的信息,然后上网搜搜什么的都可以。
一般出错的类,以及什么异常都会显示出来。一个简单的办法就是你浏览出错信息,找到你自己认识(或者说你自己写的)的类和方法,后面有标识的错误的代码行号。
Fatal adj [/fetl]致命的的,重大的,毁灭性的()的参数问题(2011-10-11 10:54:39)转载▼ 标签: 杂谈
有关,在创建时一定要用this做为参数,如:new (this);有些时候用this 会出现错误,因为dialog不是在oncreate中定义的。不妨在MainActivity建立类
public static MainActivity mainactivity; 然后在oncreate中mainactivity = this; 之后建立Dialog new ();个人试过可以,大家不妨尝试
new (this)跟new ()(A是外部类名)的区别是什么呢?实现过程中的结果有什么区别呢??能详细说明吗?谢谢。。
分享到:
2011-11-04 19:54提问者采纳
首先(this)所传参数类型是contex,也就是上下文环境。this意思是当前对象,就是调用()的对象。所以,前者的this是临近最外面的那个cla产生的对象
后者是cla A产生的对象。明白了吗?
追问
this意思是当前对象,就是调用()的对象。所以,前者的this是最外面的那个cla产生的对象 关于这句可以再详细一点说明吗。。谢谢
回答
举个例子吧:
public cla A {
//一个有名内部类
cla B{ fun(this);//这里的this是类B产生的对象
Fun();//这里的this是类A产生的对象
} } public void onClick(View v)是什么意思? View类的对象v作为参数传入onClick函数,至于View具体是什么类需要根据实际情况来看。
手机音效
Android手机的来电铃声和短信铃声的设置虽然也有些繁琐,但是细心的用户仔细摸索一下就能会快知道了。但是android手机还有按键声音和照相声音,这些都是一成不变的,时间一长,大家也难免会觉得有些厌烦,很多机友都想知道如何来更换这些系统声音,让自己的手机更加个性化。下面就简单的教大家在手机上如何更换这些系统声音。一起往下看。
首先还是需要一些工具软件,前期需要准备的文件和工具有root explorer文件管理器和ogg格式简短音频文件。
explorer(文件管理器)下载: "");//此处指定系统自带浏览器包名和Activity名称.Unable to start activity ComponentInfo:
分类: Android2012-07-20 13:12 561人阅读 评论(0)收藏 举报
Unable to start activity ComponentInfo{....}: 原因:未对控件初始化
Android开发中,空构造Intent和带参数的intent 2012-03-02 14:13wushu | 分类:JAVA相关 | 浏览1884次
代码1:
Intent intent = new Intent();
代码2: (_CALL);(("TEL:110"));startActivity(intent);Intent intent=new Intent(_CALL,("tel:110"));startActivity(intent);两个代码有什么不一样??为什么代码1提示No Activity found to handle Intent,而代码2能正常运行???
分享到:
2012-03-02 15:35提问者采纳
呃。。第二行和第三行换换位置。。
Intent intent = new Intent();(("TEL:110"));(_CALL);startActivity(intent);提问者评价
其实代码2出错的地方是那个tel:110,把tel改成TEL就可以了。
注意字母大写
⬗ Android工作总结 ⬗
三个月的实习即将结束了,感谢公司给我提供这个平台,感谢同事的帮助与关怀,让我学到了很多在课堂上学不到的知识。下面我将从以下几个方面总结这段时间自己的感受。
一、努力学习,注重实践,不断提高自身素养和工作能力
始终把学习作为获得新知、掌握方法、提高能力、解决问题的一条重要途径和方法,切实做到用理论武装头脑、指导实践、推动工作。思想上积极进取,积极的把自己现有的知识用于社会实践中,在实践中也才能检验知识的有用性。
所以在这一个月的实习工作中给我最大的感触就是我们在学校学到了很多的理论知识,但很少用于社会实践中,这样理论和实践就大大的脱节了,以至于在以后的学习和生活中找不到方向。同时在工作中不断的学习也是弥补自己的不足的有效方式。社会在变化,人也在变化,所以你一天不学习,你就会落后。
通过这三个月的实习,并结合吉凤街道的实际情况,认真学习园区的各项政策制度、管理制度和工作条例,使工作中的困难有了最有力地解决武器。通过这些工作条例的学习使我进一步加深了对各项工作的理解,可以求真务实的开展各项工作。
二、围绕中心,突出重点,尽心尽力履行职责
在各项工作中我都本着认真负责的态度去对待每项工作。虽然开始由于经验不足和认识不够,觉得在执法大队找不到事情做,不能得到锻炼的目的,但我迅速从自身出发寻找原因,和同事交流,认识到自己的不足,以至于迅速的转变自己的角色。
为使自己尽快熟悉工作,进入角色,我一方面抓紧时间查看相关资料,熟悉自己的工作职责,另一方面我虚心向街道的领导、同事请教使自己对园区、街道的情况有了一个比较全面、系统的认识和了解。
三、以极大的热情投入到工作中
刚步入工作岗位我难以适应角色的转变,不能发现问题,从而解决问题,认为没有多少事情可以做,我就有一点失望,开始的热情有点消退,完全找不到方向。
但我还是尽量保持当初的那份热情,想干有用的事的态度,不断的做好一些杂事,同时也勇于协助同事做好各项工作,慢慢的就找到了自己的角色,明白自己该干什么,这就是一个热情的问题,只要我保持极大的热情,相信自己一定会得到认可,没有不会做,没有做不好,只有你愿不愿意做。
四、在较好完成本职工作的同时积极帮助公司其他同事
自从进入执法大队以后,我一方面努力做好自己的本职工作,另一方面积极配合吉凤街道办事处同事们的工作,在同事们工作忙碌的时候主动帮助,尽自己最大的能力为同事们分忧解难。
五、存在的问题
几个月来,我虽然努力做了一些工作,但距离办事处领导的要求还有不小差距,如理论水平、工作能力上还有待进一步提高,对新的工作岗位还不够熟悉等等,这些问题,我决心在今后的工作和学习中努力加以改进和解决,使自己更好地做好本职。
在即将到来的20XX年里,我要改掉不足,弥补我的过错,做好工作计划,在工作中学习,为公司创造更大的财富。
1.毕业实习的总结报告
2.个人实习总结报告
3.新闻专业实习总结报告
4.2009暑假实习总结报告
5.新闻系实习总结报告
6.毕业设计实习总结报告
7.精选教育实习个人总结报告
8.顶岗实习总结报告
9.大四实习总结报告
10.电视台实习总结报告
⬗ Android工作总结 ⬗
成为高级工程师就没有太具体了,就是把中级工程师的那几个建议,每个都做的很好,这个阶段往往需要1-2年或者更多。高级工程师的要求是:熟练掌握android api,理解android的内部运行机制,对view、activity等一些常用的android内部运行机制熟练掌握,对常见的android知识点都有涉猎,并且还能够解决一些比较偏门的问题(需要基于android的内部机制),对android的性能调优和适配有认识,代码风格较好并且具有一定的设计模式,在工作上除了技术还要有业务的理解,能够指导初中级工程师,在工作中能够独挡一面。同时在解决问题的能力上达到一个全新的档次,即能够用恰当的手段去解决无法google出来的问题的答案。这个解决问题的能力的档次,这个有点抽象,但是的确很重要,它决定了一个人的档次,具体的需要大家慢慢体会,当技术达到一个档次后,你就可以轻松解决一些疑难杂症。
关于整个周期,从初级到高级大概要2-3年,或者更久。这么说,业余时间利用的越充分,这个周期就会越短,你的个人价值就会越高。虽然说起来简单,但是努力的过程是很艰辛的,但是只要你坚持去努力,很快你的生活就会不一样,相信这一点,谁都知道要努力才能有所收获,但为什么还是好多人没收获呢,原因是努力是不容易的,是要花时间的,是比看电影玩游戏要痛苦很多的。不怕别人比我们聪明,就怕比我们聪明的人还比我们努力。好了,大家加油了,花的时间到了,高级工程师自然就有了。最后,再强调下努力的重要性,在一个公司里,周围人的水平都和我们差不多,要深知脱颖而出的困难程度,从那么多人中脱颖而出是很难的。因此,一定要努力,一定要逼着自己去学习,这样才有可能脱颖而出,请大家一定要有这个意识。
⬗ Android工作总结 ⬗
1. Intent的几种有关Activity启动的方式有哪些,你了解每个含义吗?
FLAG_ACTIVITY_SINGLE_TOP如果目标Activity已经运行在栈顶,将不会再启动
= singleTop
FLAG_ACTIVITY_BROUGHT_TO_FRONT 、=singleTask
FLAG_ACTIVITY_MULTIPLE_TASK=singleInstance
FLAG_ACTIVITY_CLEAR_TOP、如果被启动的activity已经运行在当前 task,将不会再创建新的活动实例,位于其上的其它activity将会被关闭。
2. Activity和Task的启动模式有哪些? 每种含义是什么?
3. 通过Intent传递一些二进制数据的方法有哪些?
1). 使用Serializable接口实现序列化,这是Java常用的方法。
2). 实现Parcelable接口,这里Android的部分类比如Bitmap类就已经实现了,同
时Parcelable在Android AIDL中交换数据也很常见的。
4. 能说下Android应用的入口点吗?
真正的Android入口点是application的main,你可以看下androidmanifest.xml的包含关系就清楚了。
5. Android都有哪些XML解析器,都熟练掌握吗?
这里SAX和DOM、XmlPull相信做过Web开发的都已经滚瓜烂熟了。
6. SQLite支持事务吗? 添加删除如何提高性能?
SQLite作为轻量级的数据库,比MySQL还小,但支持SQL语句查询,提高性能可以考虑通过优化的SQL查询语句方式处理。SQLITE默认就是打开事务的。
7. Android Service和Binder、AIDL你都熟练吗?
Binder是系统进程间通信(IPC)方式之一。Binder使用Client-Server通信方式:一个进程作为Server提供诸如视频/音频解码,视频捕获,地址本查询,网络连接等服务;多个进程作为Client向Server发起服务请求,获得所需要的服务。要想实现Client-Server通信据必须实现以下两点:一是server 必须有确定的访问接入点或者说地址来接受Client的请求,并且Client可以通过某种途径获知Server的地址;二是制定Command- Reply协议来传输数据。例如在网络通信中Server的访问接入点就是Server主机的IP地址+端口号,传输协议为TCP协议。对Binder而言,Binder可以看成Server提供的实现某个特定服务的访问接入点, Client通过这个‘地址’向Server发送请求来使用该服务;对Client而言,Binder可以看成是通向Server的管道入口,要想和某个 Server通信首先必须建立这个管道并获得管道入口。Binder框架定义了四个角色:Server,Client,ServiceManager(以后简称SMgr)以及驱动。其中 Server,Client,SMgr运行于用户空间,驱动运行于内核空间。由于Android的Java层级只是一个外壳框架而已,大部分的系统组件(Android本身)都是在Nataive层(又称C/C++层)执行。这是Android的整体架构,所以我们的应用程序也必须考虑分为两层的必要性,才能完全的融入Android的整体架构里。我们看到的Android应用架构(Application Framework)其实只是Android整体架构里的外壳结构而已。Android应用框架就如同椅子的椅面,那么椅子的椅腿在哪里呢?Binder系统是在Native层的C/C++组件。Java应用程序(如Activity体系等)是透过JNI界面去呼叫Binder系统(或称为组件)。
AIDL:在Android中, 每个应用程序都可以有自己的进程. 在写UI应用的时候, 经常要用到Service. 在不同的进程中, 怎样传递对象呢? 显然, Java中不允许跨进程内存共享. 因此传递对象, 只能把对象拆分成操作系统能理解的简单形式, 以达到跨界对象访问的目的`. 在J2EE中,采用RMI的方式, 可以通过序列化传递对象. 在Android中, 则采用AIDL的方式. 理论上AIDL可以传递Bundle,实际上做起来却比较麻烦.
AIDL(AndRoid接口描述语言)是一种借口描述语言; 编译器可以通过aidl文件生成一段代码,通过预先定义的接口达到两个进程内部通信进程的目的. 如果需要在一个Activity中, 访问另一个Service中的某个对象, 需要先将对象转化成AIDL可识别的参数(可能是多个参数), 然后使用AIDL来传递这些参数, 在消息的接收端, 使用这些参数组装成自己需要的对象. AIDL的IPC的机制和COM或CORBA类似, 是基于接口的,但它是轻量级的。它使用代理类在客户端和实现层间传递值. 如果要使用AIDL, 需要完成2件事情: 1. 引入AIDL的相关类.; 2. 调用aidl产生的class.
8. 你用过哪款Android手机,有哪些优点和不足,相对于iPhone或Symbian又有哪些优缺点?
⬗ Android工作总结 ⬗
先有伯乐,才有千里马。人是可以被教育的,前提是,你的伯乐在哪里?他是谁?他能让你成为谁?贵人是教育你建立正确思维、正确价值观、正确人生理念的人,贵人是给你理顺思路的人,是给你明确方向的人,是修正你的人、是恨铁不成钢又处处说你优点的人,是鼓励和帮助你的人,是恨你到咬牙切齿又不忍心放弃你的人,是把你扶上马送你一程的人,是陪你到胜利为你呐喊欢呼的人!千锋广州Android培训班的就业老师告诉我们,学员就业后,很多会受益于公司里带团队的“师傅”,能够遇到帮助到自己的贵人,那将会受益良多。
选择比努力更重要
人骑上自行车,两脚使劲踩1小时只能跑10公里左右;人开上汽车,一脚轻踏油门1小时能够跑100公里左右;人坐上动车,闭上眼睛1小时也能跑300公里;人登上飞机,吃着美味1小时居然跑1000公里!人还是那个人,平台不一样,载体不一样,结果就不一样了!所以选择比努力更重要。对于选择Android培训的学生来说,同样选择一个培训平台也至关重要,千锋广州Android培训的老师建议学生来校实地考察后,再慎重选择自己想去的机构,不要盲目跟从!
⬗ Android工作总结 ⬗
…Android面试题
1. 下列哪些语句关于内存回收的说明是正确的? (b )
A、 程序员必须创建一个线程来释放内存 B、 内存回收程序负责释放无用内存 C、 内存回收程序允许程序员直接释放内存 D、 内存回收程序可以在指定的时间释放内存对象
2. 下面异常是属于Runtime Exception 的是(abcd)(多选)
A、ArithmeticException B、IllegalArgumentException C、NullPointerException D、BufferUnderflowException
3. Math.round(11.5)等于多少(). Math.round(-11.5)等于多少(c). c
A、12 ,-12
4. 下列程序段的输出结果是:(b )
void complicatedexpression_r(){ int x=20, y=30; boolean b;
b=x>50&&y>60||x>50&&y<-60||x<-50&&y>60||x<-50&&y<-60; System.out.println(b); }
A、true B、false C、011.activity
5. 对一些资源以及状态的操作保存,最好是保存在生命周期的哪个函数中进行(d)
A、onPause() B、onCreate() C、 onResume() D、onStart()
6. Intent传递数据时,下列的数据类型哪些可以被传递(abcd)(多选)
A、Serializable B、charsequence C、Parcelable D、Bundle
7. android 中下列属于Intent的作用的是(c)
A、实现应用程序间的数据共享
B、是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失
C、可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带 D、处理一个应用程序整体性的工作
8. 下列属于SAX解析xml文件的优点的是(b)
A、将整个文档树在内存中,便于操作,支持删除,修改,重新排列等多种功能 B、不用事先调入整个文档,占用资源少
C、整个文档调入内存,浪费时间和空间
D、不是长久驻留在内存,数据不是持久的,事件过后,若没有保存数据,数据就会
消失
9. 下面的对自定style的方式正确的.是(a)
A、
B、
C、
D、
10. 在android中使用Menu时可能需要重写的方法有(ac)。(多选)
A、onCreateOptionsMenu()
B、onCreateMenu() C、onOptionsItemSelected() D、onItemSelected()
11. 在SQL Server Management Studio 中运行下列T-SQL语句,其输出值(c)。
SELECT @@IDENTITY A、 可能为 可能为 不可能为-
肯定为0
12. 在SQL Server 2005中运行如下T-SQL语句,假定SALES表中有多行数据,执行查询
之 后的结果是(d)。
BEGIN TRANSACTION A
Update SALES Set qty=SALES表中qty列最小值大于等于SALES表中qty列最小值大于等于SALES表中qty列的数据全部为SALES表中qty列最小值大于等于60
13. 在android中使用SQLiteOpenHelper这个辅助类时,可以生成一个数据库,并可以
对数据库版本进行管理的方法可以是(ab)
A、getWriteableDatabase()
B、getReadableDatabase()
C、getDatabase() D、getAbleDatabase()
14. android 关于service生命周期的onCreate()和onStart()说法正确的是(ad)(多选题)
A、当第一次启动的时候先后调用onCreate()和onStart()方法 B、当第一次启动的时候只会调用onCreate()方法
C、如果service已经启动,将先后调用onCreate()和onStart()方法
D、如果service已经启动,只会执行onStart()方法,不在执行onCreate()方法
15. 下面是属于GLSurFaceView特性的是(abc)(多选)
A、管理一个surface,这个surface就是一块特殊的内存,能直接排版到android的视图 view上。
B、管理一个EGL display,它能让opengl把内容渲染到上述的surface上。 C、让渲染器在独立的线程里运作,和UI线程分离。 D、可以直接从内存或者DMA等硬件接口取得图像数据
16. 下面在AndroidManifest.xml文件中注册BroadcastReceiver方式正确的(a)
A、
android:name="vider.action.NewBroad"/>
android:name="vider.action.NewBroad"/> C、
android:name="vider.action.NewBroad"/>
android:name="vider.action.NewBroad"/>
17. 关于ContenValues类说法正确的是(a)
A、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的 名是String类型,而值都是基本类型
B、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的 名是任意类型,而值都是基本类型
C、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的 名,可以为空,而值都是String类型
D、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中 的名是String类型,而值也是String类型
18. 我们都知道Hanlder是线程与Activity通信的桥梁,如果线程处理不当,你的机器就会
变得越慢,那么线程销毁的方法是(a)
A、onDestroy() B、onClear() C、onFinish() D、onStop()
19. 下面退出Activity错误的方法是(c)
A、finish()
B、抛异常强制退出
C、System.exit() D、onStop()
20. 下面属于android的动画分类的有(ab)(多项)
A、Tween B、Frame C、Draw D、Animation
21. 下面关于Android dvm的进程和Linux的进程,应用程序的进程说法正确的是(d)
A、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定
拥有一个独立 的Dalvik虚拟机实例.而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念.
B、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一
定拥有一个独立的Dalvik虚拟机实例.而每一个DVM不一定都是在Linux 中的一个进程,所以说不是一个概念.
C、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例.而每一个DVM不一定都是在Linux 中的一个进程,所以说不是一个概念.
D、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik虚拟机实例.而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念.
22. Android项目工程下面的assets目录的作用是什么b
A、放置应用到的图片资源。 B、主要放置多媒体等数据文件 C、放置字符串,颜色,数组等常量数据
D、放置一些与UI相应的布局文件,都是xml文件
23. 关于res/raw目录说法正确的是(a)
A、 这里的文件是原封不动的存储到设备上不会转换为二进制的格式 B、 这里的文件是原封不动的存储到设备上会转换为二进制的格式 C、 这里的文件最终以二进制的格式存储到指定的包中 D、 这里的文件最终不会以二进制的格式存储到指定的包中
⬗ Android工作总结 ⬗
简历是用来求职的,招聘者需要找的人才,所以你要把我的优点重点的突出显示,要招聘者拿到你的简历就马上见到这一些优点,招聘者查看简历时间是有限的,如果在这10多秒时间内不能打动他,那你的简历可能就会被扔掉的了。所以你要做到的就是把重点的.内容放在第一页,并利用加粗或下划线等能让人注意的标记,适当的提示。
制作个人简历,最忌的就是搞了一份很厚多内容,页数很多的简历。正如上面所说,招聘者看简历时间有限,所以你的简历也一定要精简,第一就是页数上的精简,像简历封面、自荐信、学校介绍、专业介绍等及一些证书的复印件都不需要提供了。第二就是内容上也要精简,用简短有力的语句表达出重点的内容。其实招聘都最关心的问题,你会做什么?做过什么?有怎样的成绩,最后就会得出一个结论,你是否适合。
应聘职位: 计算机软件:ERP/SAP系统工程师、软件工程师:Windows Mobile,Android,J2ME开发、嵌入式软件开发(Linux/单片机/DLC/DSP…):
月薪要求: 5000--8000 希望工作地区: 广东省 北京 上海
工作描述: 负责企业ERP/SAP,MRP2,HR管理系统的开发与实施工作,多次带领开发团队深入企业,参与多家企业的ERP/SAP系统的设计与项目实施,成功完成了电子、服装等十多个行业公司企业的ERP/SAP系统的开发与实施任务。
离职原因:
工作描述: 负责软件,网络计算机相关课程讲授,带领学生进行进行课程实验。
离职原因:
公司名称: 起止年月:-01 ~ 2004-01广州艾斯顿有限公司
工作描述: 负责公司的电脑维护,网站维护,软件开发工作。
1992-09 -07 湖南常德机电工程学校(湖南常德职业技术学院) 机械电子 毕业证
1996-09 1999-07 湖南常德电脑大学 计算机信息管理 毕业证
1.精通Windows Mobile,WinCe手机系统软件开发,熟悉Android,J2Me系统设计。
2.精通C/C++VB/VC++,C++Builder/ABAP, EVC/WIN CE, SQL SERVER等编程语言, 有丰富的ERP/MRP/OA系统开发与实施经验,精通酒店信息管理系统的开发与维护,为多家企业成功设计开发了ERP/SAP系统软件和一百多家五星级酒店管理系统,赢得了客户广泛的好评。
2.熟识思科、华为等网络设备的安装与调试维护工作,精通RFID、嵌入式系统程序设计、嵌入式/上位机编程。
精通Windows Mobile,WinCe手机系统软件开发,熟悉Android,J2Me系统设计,精通C/C++VB/VC++,C++Builder /SAP(ABAP), EVC/WIN CE,RFID、SQL SERVER等编程语言, 熟悉思科、华为等网络设备的安装与调试维护工作,为多家企业成功设计开发、完成实施ERP/SAP系统软件和一百多家五星级酒店管理系统,赢得了客户广泛的好评。
⬗ Android工作总结 ⬗
1、 Android的四大组件是哪些,它们的作用?
答:Activity:Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为保持各界面的状态,做很多持久化的事情,妥善管理生命周期以及一些跳转逻辑
service:后台服务于Activity,封装有一个完整的功能逻辑实现,接受上层指令,完成相关的事物,定义好需要接受的Intent提供同步和异步的接口
Content Provider:是Android提供的第三方应用数据的访问方案,可以派生Content Provider类,对外提供数据,可以像数据库一样进行选择排序,屏蔽内部数据的存储细节,向外提供统一的接口模型,大大简化上层应用,对数据的整合提供了更方便的途径
Broadcast Receiver:接受一种或者多种Intent作触发事件,接受相关消息,做一些简单处理,转换成一条Notification,统一了Android的事件广播模型
2、 请介绍下Android中常用的五种布局。
常用五种布局方式,分别是:FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)。
一、FrameLayout:所有东西依次都放在左上角,会重叠,这个布局比较简单,也只能放一点比较简单的东西。二、LinearLayout:线性布局,每一个LinearLayout里面又可分为垂直布局(android:orientation="vertical")和水平布局(android:orientation="horizontal" )。当垂直布局时,每一行就只有一个元素,多个元素依次垂直往下;水平布局时,只有一行,每一个元素依次向右排列。三、AbsoluteLayout:绝对布局用X,Y坐标来指定元素的位置,这种布局方式也比较简单,但是在屏幕旋转时,往往会出问题,而且多个元素的时候,计算比较麻烦。四、RelativeLayout:相对布局可以理解为某一个元素为参照物,来定位的布局方式。主要属性有:相对于某一个元素android:layout_below、 android:layout_toLeftOf相对于父元素的地方android:layout_alignParentLeft、android:layout_alignParentRigh;五、TableLayout:表格布局,每一个TableLayout里面有表格行TableRow,TableRow里面可以具体定义每一个元素。每一个布局都有自己适合的方式,这五个布局元素可以相互嵌套应用,做出美观的界面。
3、 android中的动画有哪几类,它们的特点和区别是什么
答:两种,一种是Tween动画、还有一种是Frame动画。Tween动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;另一种Frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。
4、 android 中有哪几种解析xml的类?官方推荐哪种?以及它们的原理和区别。
答:XML解析主要有三种方式,SAX、DOM、PULL。常规在PC上开发我们使用Dom相对轻松些,但一些性能敏感的数据库或手机上还是主要采用SAX方式,SAX读取是单向的,优点:不占内存空间、解析属性方便,但缺点就是对于套嵌多个分支来说处理不是很方便。而DOM方式会把整个XML文件加载到内存中去,该方法在查找方面可以和XPath很好的结合如果数据量不是很大推荐使用,而PULL常常用在J2ME对于节点处理比较好,类似SAX方式,同样很节省内存,在J2ME中我们经常使用的KXML库来解析。
5、 ListView的优化方案
答:1、如果自定义适配器,那么在getView方法中要考虑方法传进来的参数contentView是否为null,如果为null就创建contentView并返回,如果不为null则直接使用。在这个方法中尽可能少创建view。
2、给contentView设置tag(setTag()),传入一个viewHolder对象,用于缓存要显示的数据,可以达到图像数据异步加载的效果。
3、如果listview需要显示的item很多,就要考虑分页加载。比如一共要显示100条或者更多的时候,我们可以考虑先加载20条,等用户拉到列表底部的时候再去加载接下来的20条。
6、 请介绍下Android的数据存储方式。
答:使用SharedPreferences存储数据;文件存储数据;SQLite数据库存储数据;使用ContentProvider存储数据;网络存储数据;
Preference,File, DataBase这三种方式分别对应的目录是/data/data/Package Name/Shared_Pref, /data/data/Package Name/files, /data/data/Package Name/database 。
一:使用SharedPreferences存储数据
首先说明SharedPreferences存储方式,它是 Android提供的用来存储一些简单配置信息的一种机制,例如:登录用户的用户名与密码。其采用了Map数据结构来存储数据,以键值的方式存储,可以简单的读取与写入,具体实例如下:
void ReadSharedPreferences(){
String strName,strPassword;
SharedPreferences user = getSharedPreferences(“user_info”,0);
strName = user.getString(“NAME”,””);
strPassword = user getString(“PASSWORD”,””);
}
void WriteSharedPreferences(String strName,String strPassword){
SharedPreferences user = getSharedPreferences(“user_info”,0);
uer.edit();
user.putString(“NAME”, strName);
user.putString(“PASSWORD” ,strPassword);
mit();
}
数据读取与写入的方法都非常简单,只是在写入的`时候有些区别:先调用edit()使其处于编辑状态,然后才能修改数据,最后使用commit()提交修改的数据。实际上SharedPreferences是采用了XML格式将数据存储到设备中,在DDMS中的File Explorer中的/data/data/
二:文件存储数据
文件存储方式是一种较常用的方法,在Android中读取/写入文件的方法,与 Java中实现I/O的程序是完全一样的,提供了openFileInput()和openFileOutput()方法来读取设备上的文件。具体实例如下:
String fn = “moandroid.log”;
FileInputStream fis = openFileInput(fn);
FileOutputStream fos = openFileOutput(fn,Context.MODE_PRIVATE);
三:网络存储数据
网络存储方式,需要与Android 网络数据包打交道,关于Android 网络数据包的详细说明,请阅读Android SDK引用了Java SDK的哪些package?。
四:ContentProvider
1、ContentProvider简介
当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同,如:采用文件方式对外共享数据,需要进行文件操作读写数据;采用sharedpreferences共享数据,需要使用sharedpreferences API读写数据。而使用ContentProvider共享数据的好处是统一了数据访问方式。
2、Uri类简介
Uri代表了要操作的数据,Uri主要包含了两部分信息:1.需要操作的ContentProvider ,2.对ContentProvider中的什么数据进行操作,一个Uri由以下几部分组成:
1.scheme:ContentProvider(内容提供者)的scheme已经由Android所规定为:content://…
2.主机名(或Authority):用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。
3.路径(path):可以用来表示我们要操作的数据,路径的构建应根据业务而定,如下:
要操作contact表中id为10的记录,可以构建这样的路径:/contact/10
要操作contact表中id为10的记录的name字段, contact/10/name
要操作contact表中的所有记录,可以构建这样的路径:/contact?
要操作的数据不一定来自数据库,也可以是文件等他存储方式,如下:
要操作xml文件中contact节点下的name节点,可以构建这样的路径:/contact/name
如果要把一个字符串转换成Uri,可以使用Uri类中的parse()方法,如下:
Uri uri = Uri.parse("content://com.ntactprovider/contact")
ContentUrist和ContentResolver简介
因为Uri代表了要操作的数据,所以我们很经常需要解析Uri,并从 Uri中获取数据。Android系统提供了两个用于操作Uri的工具类,分别为UriMatcher 和ContentUris 。掌握它们的使用,会便于我们的开发工作。
UriMatcher:用于匹配Uri,它的用法如下:
1.首先把你需要匹配Uri路径全部给注册上,如下:
//常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码(-1)。
UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
//如果match()方法匹配content://com.changcheng.ntactprovider /contact路径,返回匹配码为1
uriMatcher.addURI(“com.changcheng.ntactprovider”, “contact”, 1);//添加需要匹配uri,如果匹配就会返回匹配码
//如果match()方法匹配 content://com.changcheng.ntactprovider/contact/230路径,返回匹配码为2
uriMatcher.addURI(“com.changcheng.ntactprovider”, “contact/#”, 2);//#号为通配符
2.注册完需要匹配的Uri后,就可以使用uriMatcher.match(uri)方法对输入的Uri进行匹配,如果匹配就返回匹配码,匹配码是调用 addURI()方法传入的第三个参数,假设匹配 content://com.changcheng.ntactprovider/contact路径,返回的匹配码为1。
ContentUris:用于获取Uri路径后面的ID部分,它有两个比较
⬗ Android工作总结 ⬗
现在你是初级工程师,但是你想当个高级工程师,所以,你就要给自己定个目标,即:我是要成为高级工程师的男人。有了这个定位,并且努力朝着这个目标去努力,然后内心深处就会有一个感觉,这个感觉就会成为你的B格。也就是说,虽然我现在是小菜,但是我不是一般的小菜,从而内心有一种自豪感,而这种自豪感会给你提供正能量。这一条是虚的,但是是有用的。
首先找本android入门的书来看,市面上大部分书都是入门的书,要把基本的东西搞懂,在学习的工程中要顺带写点demo。需要注意的是,demo要自己写,哪怕照着书上的抄,也不能直接把书中的demo运行一下。这个是有很大的区别的,代码感觉必须要通过敲代码来培养,抄一遍代码和运行一遍demo效果是截然不同的,这点一定要注意。入门的书看完后,基本就可以上手做一些开发了,比如公司的一些项目啥的。到此,我们已经成为初级工程师了,这个时间一般1-3个月即可。
⬗ Android工作总结 ⬗
AsyncTask的基本用法这里就不在赘述了,是个安卓开发者就会,
private static final int CORE_POOL_SIZE = 5; private static final int MAXIMUM_POOL_SIZE = 128; private static final it KEEP_ALIVE = 10; …… private static final ThreadPoolExecutor sExecutor = new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE, TimeUnit.SECONDS, sWorkQueue, sThreadFactory);
在这里我们又看到了ThreadPoolExecutor,它的原理我已经在上一篇介绍过了blog.itachi85/article/details/44874511。
在这里同一时刻能够运行的线程数为5个,线程池总大小为128,当线程数大于核心时,终止前多余的空闲线程等待新任务的最长时间为10秒。在3.0之前的AsyncTask可以同时有5个任务在执行,而3.0之后的AsyncTask同时只能有1个任务在执行。
2.让我们来看看android 4.3版本的 AsyncTask
AsyncTask构造函数:
/** * Creates a new asynchronous task. This constructor must be invoked on the UI thread. */ public AsyncTask() { mWorker = new WorkerRunnable
() {public Result call() throws Exception { mTaskInvoked.set(true); Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); //noinspection unchecked return postResult(doInBackground(mParams));} }; mFuture = new FutureTask
这段代码初始化了两个变量,mWorker和mFuture,并在初始化mFuture的时候将mWorker作为参数传入。mWorker是一个Callable对象,mFuture是一个FutureTask对象,这两个变量会暂时保存在内存中,稍后才会用到它们。
我们要运用AsyncTask时,大多时候会调用execute()方法,来看看execute()的源码:
execute(Params... params) { return executeOnExecutor(sDefaultExecutor, params);}
返回了executeOnExecutor并传进去sDefaultExecutor(默认的线程池)。先看看executeOnExecutor的源码:
executeOnExecutor(Executor exec,Params... params) { if (mStatus != Status.PENDING) {switch (mStatus) { case RUNNING: throw new IllegalStateException(Cannot execute task: + the task is already running.); case FINISHED: throw new IllegalStateException(Cannot execute task: + the task has already been executed + (a task can be executed only once));} } mStatus = NING; onPreExecute(); mWorker.mParams = params; exec.execute(mFuture); return this; }
传入的线程池exec调用了execute方法并将上文提到的mFuture传了进去。
这个传进来的线程池sDefaultExecutor就是默认的线程池SerialExecutor也就是调用了SerialExecutor的execute()方法:
public static final Executor SERIAL_EXECUTOR = new SerialExecutor(); private static volatile Executor sDefaultExecutor = SERIAL_EXECUTOR;
SerialExecutor的源码:
private static class SerialExecutor implements Executor { final ArrayDeque
调用SerialExecutor的execute方法这里可以看到传进来一个Runnable,这个Runnable就是上文提到的mFuture(FutureTask),第九行执行了FutureTask的run方法:
public void run() { if (state != NEW ||!pareAndSwapObject(this, runnerOffset, null, Thread.currentThread()))return; try {Callable
在run方法中执行了c.call,这里的c就是我们上文提到的mWorker(WorkerRunnable),
执行WorkerRunnable的call方法:
() {public Result call() throws Exception { mTaskInvoked.set(true); Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); //noinspection unchecked return postResult(doInBackground(mParams));}
最后一行postResult()方法源码:
private Result postResult(Result result) { @SuppressWarnings(unchecked) Message message = sHandler.obtainMessage(MESSAGE_POST_RESULT, new AsyncTaskResult
我们发现就是发送了一个消息,上面的代码发送的消息由这里接受:
private static class InternalHandler extends Handler { @SuppressWarnings({unchecked, RawUseOfParameterizedType}) @Override public void handleMessage(Message msg) {AsyncTaskResult result = (AsyncTaskResult) msg.obj;switch (msg.what) { case MESSAGE_POST_RESULT: // There is only one result result.mTask.finish(result.mData[0]); break; case MESSAGE_POST_PROGRESS: result.mTask.onProgressUpdate(result.mData); break;} } }
消息是MESSAGE_POST_RESULT所以会执行 result.mTask.finish(result.mData[0]) ,finish源码:
private void finish(Result result) { if (isCancelled()) {onCancelled(result); } else {onPostExecute(result); } mStatus = Status.FINISHED; }
当被取消时会执行 onCancelled(result);否则就会调用 onPostExecute(result);这样我们就可以在onPostExecute方发中得到我们需要的结果result来进行下一步的处理了。
?? ?? ?? ?? ?? ?? ?? ?? ?? ??⬗ Android工作总结 ⬗
虽然现在离那时面试的经历有一段时间了,但是我还是要说出来,希望能给想要找工作和换工作的同学们一些帮助。
先说投简历,其时我没投简历,有经验的同学们可以把简历挂到网上(最好是智联)等着公司和猎头给你电话就行,简历要尽量简洁,当然你会的技能最好写的详细些,最好一篇纸搞定。
先说小公司,小公司面了10多家,总结来说小公司远没有想象中那样要求低,很多小公司要求还是很高的,但基本问的都是些皮毛,大家只要把网上的面试题搞定就好了,不少小公司都问道了布局,因为面试官以前可能是做j2ee的,他们要转android应用层开发,界面布局还是稍微另他们头痛的事,小公司不愿花从大多成本招程序员,一个客户端往往就2,3个人开发,比较变态的是有的公司让你一个人搞定。另外小公司大多做apk,布局和界面的美化对他们来说十分重要。小公司一般都会有笔试题,都是些基础知识还有工作中常见的问题,比如手机适配方面的知识。有两家中小企业有些印象:一家忘记名字了,项目经理很牛的样子,说出他们公司为了性能整个客户端就用一个activity,这个固然可以,但是也得考虑可维护性吧,再说写成一个activity也没什么牛的,不用那么吹嘘。还有一家是中科金财,问了些布局和socket和手机地图的问题就ok了,结果我吃了大亏,报道时说第二天就派我去飞机场(客户那边),让我一个人负责客户端的开发,我说周期多长,答曰:两三个月。立马闪人,工作地点又远又偏僻,还我一个人搞开发,待遇也不高,典型的节约成本拿技术人员当驴使的公司。
轮到些大一点的公司,先说搜狐,搜狐要求还是很高的,问题是该项目经理对我这种从小公司出来的人很不感冒,他很随意但显然坐不住凳子,他说他们做了一个新浪视频客户端正在维护,让我看着他们的界面,让我简单分析他们的布局。这个问题看似简单其实很难,要全部说清楚几乎不可能。
还有千橡互动(人人网),这个公司也勉强算大吧= =,前台很牛的样子,进来让我做智力题,我说我来面试程序员,他说每个来面试的必须写,一个填图题跟智力无关,反而感觉自己被轻视了。面试官穿这脱鞋,蓬头垢面,很“牛”的样子。拿了张纸考我闰年的算法和listview的优化,期间他一直手直哆嗦,看来派了个小兵考我,再次被轻视,果断闪人(罢面)。
联想面了3次+ +,第一个项目经理还是很随和的,问了些Task的问题,activity加载模式以及一些我项目中的问题,可能我经验尚浅没进去。第二次有些变态,四个人面我,其中一个之总经理级别,面我一个小程序员不用这样吧,一人问一个问题,静态的问题啊,我项目中的问题啊,不过居然问我代码是怎写的,让我说出来,我当时无语了,早忘了啊。第三次没印象了。
土豆网很偏僻啊,我看了看他们的环境(不太好)人员也很闲散,大下午的都不在工作。项目经理有会,找可俩手下面我,感觉更像是技术PK,聊些asyncTask了,消息处理了,当我说道framework层时,显然他们就不知道了。Pk了一小时,还让我教他们关于surfaceview的知识,说他们不清楚,我刚想讲项目经理来了,可能是离职原因说的不太好吧。只差一步了啊= =,所以离职原因非常重要,想好了再说出来。
京东商城好像包了三层大楼,环境不错,来了个开发人员考我问题,问的都是项目中的问题,一些关于多线程下载的问题,问道我代码,我记错了,所以就惨了,其实我认为不应考一些代码的问题,虽然是自己写的,但过一阵都忘了,我要问面试官代码,估计他也说不出来。不过感觉不错。
阿里云,刚去时不知道是什么公司,是阿里巴巴的子公司,环境还ok,主要是项目经理不错,我们聊了一个半小时,技术问题没问太多,就是关于布局一些问题,消息处理,数据存储等一些基本题,他更关注的是你的思想,很可惜这个岗位招的是管理人员,我经验尚浅条件不符。
金山去了一趟,楼里还不错,不过我没见面试官,人事给我一张笔试题,我其实很差异大公司一般不笔试啊+ +,我看了看,三道题都拿不准,一道链表的算法题,晕菜啊没看啊。最郁闷的是,最后一道问金山快盘的原理和设计什么的,我也没用过啊,狂晕,果断闪人。
中科软,这个比较郁闷,项目经理显然很喜欢我,遗憾的是他们这没有做android开发,所以面试时最好先了解面试的公司招什么职位,具体做哪些事,变被动为主动。
中软国际,这个是做外包项目,面试题很多,主要还是基础,什么如何观看手机的内存cpu信息等等。
文思创新,临时有事直接罢面,面试题很多也很恶心,算法题考的很多,还是客观题。
还有一家大公司忘了名字了,这回彻底被鄙视,意思是我在小公司没有做过内存优化和性能方面的工作,不过面试期间我接了四个面试电话,把俩面试官凉在那也算解了气。
期间还有新浪,百度,360,创新工厂找我面试因为各种原因没去,最后去了华为,在华为可以让你的层次更高一些,因为我参与的是整机开发,如果去搜狐和千橡或者是土豆做客户端维护的,技术就容易停留到应用层了。
[android面试经历]
⬗ Android工作总结 ⬗
伴随着3G时代的到来,移动终端所能完成的功能在各行各业日益广泛和深入,移动便携的概念早已深入人心,让人们更加的依赖移动终端。
移动网络开发技术期末考核 食物相宜相克大全
专 业: 计算机科学与技术 班 级: 学生姓名: 学 号:
2014年6月
目 录
1.项目简介 ....................................1
1.设计背景 ....................................1
2.功能概要 ....................................1
2.系统分析 ....................................1
1. 需求分析 ....................................1
2.可行性分析 ....................................2
1.技术可行性分析 ....................................2
2.操作可行性分析 ....................................2
3.系统设计 ....................................2
1.总体设计 ....................................2
2.功能设计 ....................................3
3.数据库设计 ....................................3
4.交互设计 ....................................3
4.系统实现 ....................................3
1.实现平台: ....................................3
2.主要界面: ....................................3
3.主要代码 ....................................5
1.主界面代码....................................5
2.编辑数据界面: ....................................8
3.操作数据库代码: ....................................10
4.显示格式代码: .................................... 12
5.系统测试 ....................................13
计算机科学与技术专业大作业报告
1.项目简介
1.设计背景
当今,手机成为日常生活必不可少的工具,随着科学技术的发展,智能手机日趋发展成熟。Android手机操作系统是全球最受欢迎的智能手机平台之一。开发灵活性更强,各种软件层出不穷,发展前景十分广阔。
智能手改变人们使用手机的习惯,也放大人们对手机的想象。对目前形式的分析和对未来的展望,手机系统已经不仅限于通话和短信等内容,手机扩展功能日益发展壮大,利用手机里的各种基本功能,可以拓展更多更实用的软件,本程序就是用android手机系统的各种功能实现有创意且实用的食物相宜相克系统。
民以食为天,食物是生活中必不可少的,而随着人们生活水平的提高大家对食物的安全也越来越重视,然而如今的日常生活中也存在着很多食物搭配上的误区,这些错误的搭配也直接或者间接的影响着我们的健康。搭配相宜会促进营养吸收,于健康有益;搭配相克会破坏营养价值,甚至引发疾病或导致中毒。只有根据食物的属性及自身情况合理安排膳食,趋利避害,才能吃得科学,吃出健康。
本程序就是基于这么一种设计理念策划并制作完成的。
2.功能概要
本程序提供了查询和添加两种功能。
查询功能:当用户输入食物名称后,点击查询按钮,页面上显示用户查询的食物及与之相关的相宜与相克搭配。用户点击显示全部按钮,页面上显示数据库中所有数据。
添加功能:用户可以点击添加数据按钮,跳转到添加数据界面,用户可以对数据库中食物相宜相克数据进行添加,删除,修改。
2.系统分析
1. 需求分析
在智能手机日益发展壮大的今天,智能手机人人都有,而本程序的受众面相当之广泛,人人都需要吃食物,但了解食物之间如何搭配食用的人却是很少,正是因为有了这样的市场需求,本程序才得以应运而生。无论是居家主厨的家庭主妇,还是注重饮食健康的男女老少,都可以简单、快捷、方便的使用本程序查询出与之相宜或相克的食物,帮助人们了解食物的相宜相克。
2.可行性分析
随着社会与科技的发展,人们越来越注重移动、便携与方便。而随着这股潮流的发展,手机应用游戏应运而生。安卓系统作为一个市场占有超过50%的手机平台,其应用的发展非常迅猛
随着手机的.发展与普及,以及互联网技术的扩展,人们对移动通讯的需求必将需要实现多元功能化。通过移动通讯连接到Internet上,实现数据,应用等资源共享。提高了数据的资源利用,并能及时的到更新。在这样的外界环境之下,手机应用的推广得到保证。
1.技术可行性分析
Android系统平台是一个基于Linux开源的手机操作系统。它由Google公司在2007年11月5日正式发布的。
Android平台是由操作系统、中间件、界面和应用软件组成。是第一个要为移动终端创造的一款真正开放的完整的操作系统。
说道Android操作系统平台的优势,不得不提到最突出的两个特点“免费”和“开源”。
免费:Android免费提供其操作系统,让移动过电话制造商可以免费搭载Android操作系统,使得手机的制作成本大大降低,渐渐使得Android普及。
开源:Android手机制作操作系统代码的开放性,不仅让开发者可以在统一开放平台进行程序开发,而且可以解决现今市场不同智能机之间因文件格式不同造成的信息交流不便、程序内容无法移植等问题;并且Android的开机源码就意味着手机使用者不必在被动地接受移动电话制造商默认的设施和环境,使用者完全可以根据自己的想法自定义手机的配置。
2.操作可行性分析
因为该程序是一个简易的小型应用程序,开发不需要太多人力、精力,因此实现起来比较容易。对手机的性能没有过高的要求,系统利用率的占用也较低。
而且本程序功能简单,用户只要有一点手机操作经验,看过提示后,对本软件的操作就会非清楚。
3.系统设计
1.总体设计
本程序主要是为了让用户只需要简单操作就可以了解各种食物之间的相宜相克,界面应该简洁,操作简单,方便用户上手,所以功能不需要太复杂,只需要简单实用。
2.功能设计
(1)实现查找数据库中数据功能
利用向查询按钮添加监听事件来向EditText获取需要查询的数据名称,然后到数据库中查询,将结果显示TextView中,向显示全部按钮添加监听事件,用户单击显示全部按钮,调用方法把数据库中所有数据显示在界面上。
(2)实现向数据库中添加、删除、修改数据功能
利用向添加、删除、修改按钮添加监听事件来向EditText获取需要操作的数据名称及内容,然后调用方法,对数据库进行相应操作
3.数据库设计
在数据库中建立一张表,储存食物数据信息
4.交互设计
利用activity,intent实现查询和添加数据两个界面之间的交互
4.系统实现
1.实现平台:
Android 4.0.3
2.主要界面:
(1)搜索界面
在该界面中,用户可以搜素数据库中食物信息。
图1 搜素界面 图2 搜素空值
图3搜素不到数据 图4显示全部
(2)编辑界面:
在该界面中用户可以对数据库进行添加、删除、修改操作。
图5 编辑界面 图6 输入空值
3.主要代码
1.主界面代码:
2.编辑数据界面:
3.操作数据库代码:
4.显示格式代码:
5.系统测试
程序在Android 4.0.3 模拟器以及Android手机中运行测试,能够完美运行!
⬗ Android工作总结 ⬗
近来生活有点平淡,工作也够空闲,重温了《可用性工程》,为了鼓励自己认真学习,不要昏昏欲睡式啃书,故边看边写,但是写完才发现,这些都是说了很多的DD,估计大家都了解了,但是为了表彰我的努力,呵呵,贴出来秀一下:
理想情况当然是仅提供用户当前所需要的信息,并把它放在所需的地方(Jakob Nielsen)。简单的说,让用户可以在他需要的地方看到想要的东西。一起使用的信息应该在屏幕上彼此靠近,例如Qzone的音乐盒,我个人觉得有点不合理,“播放列表”和“音乐收藏”其实在操作上是紧挨的,在界面排版上理应彼此靠近,这样信息对象的操作顺序也符合了用户高效的工作原则。
当然,如果可以让用户根据自己的喜好来调节顺序就更好了。当然要给一个默认的数值了。例如:物业管理系统,首先的操作是“录入用户的资料”,然后让用户“入住”,其次再“进行装修”,等一段时间后,用户的活动可能只是“投诉,维修”之类的操作。在系统设计的时候,设计者当然要给用户一个默认的顺序,可以按照事件的发展进行;但是,最好还是给用户可以自己调节操作顺序的操作,因为当某一个操作开始的时候,可能会经历很长时间。
如图,按照了Nielsen的说法,区分了封闭性、接进性、相似性的图形形态。合理的区分相似的内容,用边框进行区分,把相关的操作尽量的靠近。
颜色的运用对界面的设计也是很重要的,有的设计者把界面设计的五颜六色,美其名曰给用户视觉冲击,但是我觉得要是不想把自己的网站,做另类版的,就慎用色彩。Jakob Nielsen提到“不要过度的使用颜色”;颜色的选择在5~7种较好,用户浏览的时候,设计者也要考虑用户的眼球,尽量使其简单记忆,不用太累的去区分颜色。据说Durrent and Trezona 做过测试,经过专业训练的用户也只能对付大约11种颜色。(其实对于色彩,我还是了解甚少,希望大家指点)
Word是一个大众的工具,使用的群体很多、很杂乱,所以可以看到他使用的颜色,包括图标,都是可以在不使用颜色的情况下辨别如何操作。Jakob Nielsen提醒“要记住,有很多人是色盲!”
3、“少即是多”,说起来惭愧,记得第一次看英文稿件的时候,还以为是“过犹不及”。
甚至到现在还不甚了解这其中的道理,以及它具体如何运用到设计中去。
例图所示,在用户使用的界面上尽量显示用户最关心的问题,和最直接的操作,而相关的“其他信息”“销售记录”等,不要在页面中显示,
在界面上添加太多的信息和数据会给用户带来多余的审视,甚至是困扰。让用户把他最关注的东西用最快捷的方式展现出来,而且是一目了然的。
一定不能使用系统语言,假如用户遇到“某某参数尚未定义”就惨了,摸不清头脑,对软件形象也大打折扣。使用用户的语言法则来书写系统的提示或相关警告,也是从交互的方式考虑呀。我遇到最好的语言就是金山打字软件的提示,当我想关闭时,系统会提示“今天累了,就到这里把”,很舒服哦。
那么如何更好的使用用户的语言呢?据说最好的方式是通过用户的投票,把所有可能出现的语句列出清单,供用户打分,然后汇总意见。有统计数据显示,使用技术语言来表达导致用户犯错的平均值是23.6个错误,但是,使用投票汇总的平均值是5.8个错误。
这个自然不用说,最好让我什么都不用记忆,早上上班一来,点击一个按钮,所有的工作都是系统自动产生,还要记忆下哪些是我想要的东西。(难度有点大了)
从设计中也有很多这样的例子,例如用户的搜索条件,用户的输入习惯,用户的id,用户经常关注的信息提示等。
同样的系统,同样的信息在所有的屏幕和对话框中显示的位置和形式应该一样,这样当用户经常使用时,就是自然遵循这个法则去操作,同时也是减少用户记忆的一个方面。当然,表单或对话框等表现形式的统一,也要依据系统自身的功能结构了,所以每个项目开始的时候,定项目的表现形式也是一大工程呀,不仅要考虑系统的扩张性,还要考虑表现形式的一致性。(如果在加上开发人员的不理解或者坚持,那……)
用户在哪里?要怎么做?那个按钮是做什么的……?一连串的问题,都会使你已有的用户偷偷的溜走喔!所以及时的用户反馈是很必要的,所以我建议我们的项目中增加用户路径和操作步骤的示意图,这样用户知道下一步做什么。同时,在按钮上添加了“alt”提示;但是当用户犯错前,我如何提示用户是不可操作的,或不建议操作的,一直都没有好的解决方法###
还有,系统或页面的相应时间也是反馈的一部分,例如apple叫我等10分钟,再不给我剩余时间的提示,我早就跑了!
不言而喻,但是undo的使用还是慎重,请查看bbs.thread-2798867-1-1.html,有相关的讨论。
七、 还有一些其他的准则,理解起来还是比较轻松的,如快捷方式、好的出错信息、避免出错、帮助和文档和经验性评估。
来自:xibei/article.asp?id=51
⬗ Android工作总结 ⬗
篇1:android获取手机IMSI号<\/h2>
1、什么是imsi号
国际移动用户识别码(IMSI:International Mobile SubscriberIdentification Number)是区别移动用户的标志,储存在SIM卡中,可用于区别移动用户的有效信息,其总长度不超过15位,使用0~9的数字。其中MCC是移动用户所属国家代号,占3位数字,中国的MCC规定为460;MNC是移动网号码,最多由两位数字组成,用于识别移动用户所归属的移动通信网;MSIN是移动用户识别码,用以识别某一移动通信网中的移动用户。
MNC:Mobile Network Code,移动网络码,2~3位,中国移动系统使用00、02、07,中国联通GSM系统使用01,中国电信CDMA系统使用03,一个典型的IMSI号码为460030912121001;
2、获取手机imsi号
public static String getImsi {
TelephonyManager tm = context.getSystemService;
String _imsi = tm.getSubscriberId;
if){
return _imsi;
}
return “未知”;
}
3,
public static String getImsi {
TelephonyManager tm = context
.getSystemService;
String deviceid = tm.getDeviceId;// 获取智能设备唯一编号
String te1 = tm.getLine1Number;// 获取本机号码
String imei = tm.getSimSerialNumber;// 获得SIM卡的序号
String imsi = tm.getSubscriberId;// 得到用户Id
if ) {
Log.i;
return imsi;
}
return “未知”;
}
篇2:Android安卓获取ID号,本机号码,手机型号,系统版本<\/h2>
Mark一下
public void Msg1 { Toast toast = new Toast; Toast toast1 = toast.makeText; ;}//获取ID号final TelephonyManager tm = getBaseContext.getSystemService;final String tmDevice, tmSerial, tmPhone, androidId;tmDevice = “” + tm.getDeviceId;tmSerial = “” + tm.getSimSerialNumber;androidId = “” + vider.Settings.Secure.getString, vider.Settings.Secure.ANDROID_ID);UUID deviceUuid = new UUID, tmDevice.hashCode<< 32) | tmSerial.hashCode);String uniqueId = deviceUuid.toString;Msg1; //获取手机型号String strPhoneModule = android.os.Build.MODEL;Msg1; //获取系统版本String strSystemType = android.os.Build.VERSION.RELEASE;Msg1; //获取本机号码TelephonyManager phoneMgr=this.getSystemService;String strPhoneNum = phoneMgr.getLine1Number;Msg1;
篇3:Android获取验证码后倒计时程序<\/h2>
在开发是经常会遇到获取短信验证码,然后获取验证码后需要等待1分钟倒计时,这是是不能再次发送短信请求的,这是需要一个倒计时程序
这里我封装了一个Util类,希望对开发的小伙伴能有帮助,
public class TimeCountUtil extends CountDownTimer {
private Activity mActivity;
private Button btn;//按钮
// 在这个构造方法里需要传入三个参数,一个是Activity,一个是总的时间millisInFuture,一个是countDownInterval,然后就是你在哪个按钮上做这个是,就把这个按钮传过来就可以了
public TimeCountUtil {
super;
this.mActivity = mActivity;
this.btn =btn;
@Override
public void onTick {
btn.setClickable;//设置不能点击
btn.setText;//设置倒计时时间
//设置按钮为灰色,这时是不能点击的
btn.setBackground);
Spannable span = new SpannableString.toString);//获取按钮的文字
span.setSpan, 0, 2, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);//讲倒计时时间显示为红色
btn.setText;
@Override
public void onFinish {
btn.setText;
btn.setClickable;//重新获得点击
btn.setBackground.getDrawable);//还原背景色
}
}
调用方法
然后在需要用这个的方法里new一个对象,然后调用start;方法就可以啦
CountUtil timeCountUtil timeCountUtil = new TimeCountUtil;
timeCountUtil.start;
// 获取验证码
getVerificationCode;
实现的效果图
篇4:Android获取默认浏览器信息<\/h2>
Android系统可以用如下方法获取默认浏览器信息:
public static ActivityInfo getBrowserApp {
String default_browser = “android.intent.category.DEFAULT”;
String browsable = “android.intent.category.BROWSABLE”;
String view = “android.intent.action.VIEW”;
Intent intent = new Intent;
intent.addCategory;
intent.addCategory;
Uri uri = Uri.parse;
intent.setDataAndType;
// 找出手机当前安装的所有浏览器程序
List
-
✹好拿网hn373.COm精选攻略:
- 日记大全暑假篇 | 亚马逊工作总结 | 月份工作总结 | 卫生工作总结 | 【必备】英语教师工作总结四篇 | 【必备】英语教师工作总结四篇
if >0) {
ActivityInfo activityInfo = resolveInfoList.get.activityInfo;
String packageName = activityInfo.packageName;
String className = activityInfo.name;
return activityInfo;
} else {
return null;
}
}
篇5:android获取ip和本机的物理地址<\/h2>
/** * 获取ip * * @return */ public static String getLocalIPAddress { try { for ; en.hasMoreElements;) { NetworkInterface intf = en.nextElement; for ; enumIpAddr.hasMoreElements;) { InetAddress inetAddress = enumIpAddr.nextElement; if && inetAddress instanceof Inet4Address) {// return inetAddress.getAddress.toString;return inetAddress.getHostAddress.toString; } } } } catch { Log.e); } return null; } public static String getLocalIPAddress { WifiManager wifiManager = context .getSystemService; WifiInfo wifiInfo = wifiManager.getConnectionInfo; String ipAddress = FormatIP); return ipAddress; } public static String FormatIP { return Formatter.formatIpAddress; } // /获取本机IP地址 public static String getLocalIpAddress { WifiManager wifiManager = ctx .getSystemService; WifiInfo wifiInfo = wifiManager.getConnectionInfo; int ipAddress = wifiInfo.getIpAddress; try { return InetAddress.getByName, , , )).toString; } catch { return null; } } // 获取本机的物理地址 public static String getLocalMacAddress { WifiManager wifi = ctx .getSystemService; WifiInfo info = wifi.getConnectionInfo; return info.getMacAddress; }
篇6:Android手机怎么才能不卡?<\/h2>
一直以来Android给人的感觉都是各种卡顿,尤其是开的程序比较多以后,和iPhone比较起来流畅度上会有不小的差距,实际上我们只要优化得当,Android也能很流畅,丝毫不逊色于iPhone。本文主要介绍的是从系统优化、第三方软件优化以及设置优化几方面结合来改善Android的流畅度。
1.系统
刷机
系统这一块绝对是有着举足轻重的地位,一款好的系统能让Android脱胎换骨。而从Android 4.1开始,Android的流畅性可以说有了质的飞跃。Android 4.1的触控感觉非常好,这主要归功于Android 4.1的帧速度提高到了60fps,而且在触摸延迟上有更加优秀的表现。因此只要情况允许,建议所有Android手机都刷到4.1以上,这种体验绝对是以往使用4.0甚至2.3系统都不可想象的。当然,对于大部分Android手机来说,4.1还是遥不可及,只有通过第三方ROM才能达到品尝“果冻豆”的目的,这里就要特别注意第三方ROM的稳定性问题。
如果不能刷Android 4.1,那还可以选择一些第三方ROM例如原生系统AOKP或者CM系列。由于系统非常精简,这些第三方ROM也会带来流畅度的提升,当然要放弃的是官方ROM的各种自带软件和UI,这就要看用户的取舍了。
更换内核
Android手机的内核(Kernel)对手机流畅性也是有很大的影响,内核直接影响CPU的运行效率、频率变化。说到刷内核就不能不提超频,一些第三方内核支持CPU的超频,CPU频率提高了流畅度当然会有变化,当然这里也要特别注意温度和电压的控制。
CPU的超频
2.设置优化
开启性能模式
这个问题在此前的文章“如何让你的手机更省电?”中已经有提及过,很多手机默认是标准模式甚至是省电模式,这对性能是有不少影响的,因此建议不是有特别需求还是调至性能模式(位置:系统设置,因不同手机而异)。
关闭动画特效
这是一个Android 4.0才开始有的设置选项,Android 4.0有两项(窗口动画缩放以及过渡动画缩放),Android 4.1增加了动画程序时长调整。有人说Android的动画比较卡,没有iPhone顺滑,有这选项可好,你说动画不顺嘛,我关掉还不行吗?关闭了这些以后会感觉反应迅速了很多,但是牺牲了一定的视觉感受(位置:设置→开发人员选项)。
不保留活动
这个选项即把Android相对iPhone的其中一个很大的优势舍弃了,也就是我们常说的“多任务”,Android现在的高端机动不动就四核、2G RAM,如果只跑一个软件,可想而知流畅度会非常高,但是这里并不建议使用这种方法提升流畅度,没有多任务的Android更像一只三脚猫,如果只是体验一下那种感觉也无妨(位置:设置→开发人员选项),
3.第三方软件
更换启动器
实际上很多Android卡顿的罪魁祸首就是系统的启动器,现在一些品牌的手机启动器做得越来越炫丽,也越来越复杂,当然代价就是占用RAM和ROM更多,如果不是对这方面特别有要求,完全可以替换一些第三方的启动器,例如Apex、NOVA等,它们带来的流畅度提升也是非常明显的(这里使用NOVA作介绍)。
NOVA启动器默认风格趋于原生Android启动器
设置非常多样,有很多个性化选项
桌面滚动效果的调节,这也是第三方启动器的一个很大优势。
卸载系统自带程序
现在越来越多官方系统自带很多恼人的程序,而且不能卸载,这些软件往往都会开机自启动,对系统流畅度影响比较大,但是要删除这些自带软件需要获取root权限。通用一些第三方ROM也会有自带垃圾软件问题,而大部分第三方ROM都自带root,所以这个相对好解决。这里删除程序也要特别注意,不要错删一些系统软件,否则后果很严重(这里使用的是“力卓工具箱”)。
建议:卸载一些不常用的桌面插件、系统强制安装的第三方软件等
管理开机自启动项
这方面在之前的省电专题中也有提到过,减少开机自启动的软件,除了能节省电量之外,当然还能提升手机的反应速度,当然这里也不能一下把所有软件都关闭,关闭一些不需要自启动的第三方软件就可以达到目的了,如果不小心把系统本身的程序禁用了就会比较麻烦(这里使用的是“力卓工具箱”)。
建议:禁用大部分第三方软件自启动
其实很多“常识性”的问题都是以讹传讹,比较典型的就是Android比iPhone卡很多,iPhone不“拼配置”等实际上都是有误的,我们只能通过亲身使用以及测试才能知道真相,还是那句老话,眼见为实。以下是Galaxy Note II的流畅性测试,在桌面顺滑度来看完全是可以和iPhone媲美的。当然,Android要有这种程度的流畅感觉,还是需要建立在强大的硬件配置上的。
篇7:Android手机WIFI问题集合<\/h2>
现在市面上的Android手机基本都是海外发行,因此都带有WIFI功能,非常方便,另外由于Android系统的依靠于网络才能发挥其方便快捷的特点,因此WIFI也是其不可分割的一部分,那么该如何设置呢?
首先在系统主屏界面下按下Menu键,选择最后一项Settings(设置),依次进入Wireless controls(无线控制)――Wi-Fi settings(WIFI设置),将Wi-Fi勾选,再将Network notification(网络提示)打开,系统会自动进入搜索网络状态,稍等片刻搜索完毕点击可用网络,如果有密码,输入密码点击连接即可,
在WIFI日常的使用中会经常遇到一些问题,比如已连接却不能上网等,这些很有可能是因为其他的一些原因导致,大致可以分为两类,一类是程序设置问题,基 本存在与密码不对等情况。另一位是硬件问题,很可能是因为路由器固件较老不能很好的发送信号等,用户可以根据自身情况逐一排除。
篇8:诺基亚会推出 Android 手机吗?<\/h2>
诺基亚 CEO 斯蒂芬伊洛普(Stephen Elop)在 1 月底的财报电话会议上透露,诺基亚将建立或加入一个有竞争力的生态系统。很多人对此解读为,诺基亚在考虑使用 Android 或 Windows Phone 7平台。你认同这种判断码?