当前位置:首页 > android 测试题 答案
答案说明:(1)ANR Application Not Response 应用无响应。主线程(UI线程)。
(2)如果在主线程中进行了耗时的操作(比如连接网络,拷贝大数据)Thread.sleep(); (3)避免ANR,可以把耗时操作放到子线程。
(4)在4.0之后谷歌强制要求连接网络不能在主线程中进行访问。
09-26 01:49:03.818: W/System.err(1638): android.os.NetworkOnMainThreadException (5)只有在主线程(UI线程)才可以更新UI
09-26 01:51:50.050: W/System.err(1708): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
(6)消息机制可以用来处理这种更新UI的情况。 5、
由于子线程不能更新UI代码,我们可以使用下列哪种方式()解决这个问题。(10分) A、在子线程中使用setImageView(..)设置图片 B、调用runOnUiThread(.. )方法中更新ui
C、在子线程中用handler发送message给主线程,然后在主线程中更新ui D、Thread中直接更新ui 参考答案:B,C
答案说明:runOnUiThread(),顾名思义就是运行在UI线程,也就是主线程。
1. 如果仅仅就是更新UI,那么我们可以用runOnUiThread(),当中的代码都会在主线程中执行。2. 当我们需要传递参数的时候,这时候就需要使用handler来实现 判断题 共0题满分:0分 填空题 共1题满分:10分 6、
_____ 主要用于存放所有通过Handler发送的消息。 (10分)
参考答案:MessageQueue 答案说明:1. Message
Message是在线程之间传递的消息,它可以在内部携带少量的信息what字段,用于在不同线程之间交换数据。除此之外还可以使用arg1和arg2字段来携带一些整型数据,使用obj字段携带一个Object对象。 2. Handler
Handler顾名思义也就是处理者的意思,它主要是用于发送和处理消息的。发送消息一般是使用Handler的sendMessage()方法,而发出的消息经过一系列地辗转处理后,最终会传递到Handler的handleMessage()方法中。 3. MessageQueue
MessageQueue是消息队列的意思,它主要用于存放所有通过Handler发送的消息。这部分消息会一直存在于消息队列中,等待被处理。每个线程中只会有一个MessageQueue对象。 4. Looper
Looper是每个线程中的MessageQueue的管家,调用Looper的loop()方法后,就会进入到一个无限循环当中,然后每当发现MessageQueue中存在一条消息,就会将它取出,并传递到Handler的handleMessage()方法中。每个线程中也只会有一个Looper对象。 简答题 共1题满分:20分 7、
简单介绍一下Handler使用步骤.(20分) 参考答案:1 在主线程创建Handler对象
Private Handler handler = new Handler(){ }
2 重写handlemessage方法
3 拿着主线程创建的Handler发送一条消息 handler.sendMessage();
4 重写的handlemessage方法就会接收到我们发送的消息.
答案说明:Android4.0以后不能在UI线程访问网络,而子线程也不能更新UI界面。为了根据下载进度实时更新UI界面,就需要用到Handler消息机制来实现线程间的通信,一般我们在主线程创建Handler对象.然后开启一个子线程去访问网络处理耗时的任务,然后通过主线程创建的Handler发送消息,消息就被加入到了消息队列MessageQueue中,系统里有一MainLooper(主消息的循环器),不断的监视消息队列,一旦发现消息队列里有消息,就把消息给取出来交给Handler,我们重写Handler的handleMessage()方法,在这个方法里面去更新ui. 代码题 共1题满分:20分 8、
编写一个图片查看器的案例,访问指定的url地址,并将获取到的图片更新ui界面。(请使用除handler以外的方式)。(20分)
答案说明:子线程不能更新ui,所以通过runOnUiThread在主线程中更新ui. Xml布局文件:
Java代码中:
public class MainActivity extends Activity { private ImageView iv; @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // [1]找到我们关心的控件 iv = (ImageView) findViewById(R.id.iv); } // [2]点击按钮进行查看 指定路径的源码 public void click(View v) { new Thread() { public void run() { String path = \ try { URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection)
url.openConnection(); conn.setRequestMethod(\ conn.setConnectTimeout(5000); int code = conn.getResponseCode(); if (code == 200) { InputStream inputStream = conn.getInputStream(); final Bitmap bitmap =
BitmapFactory.decodeStream(inputStream); runOnUiThread(new Runnable() { public void run() { iv.setImageBitmap(cacheBitmap); } }); } } catch (Exception e) { e.printStackTrace(); } }; }.start(); }
第三天:
1,当前Activity被其他Activity覆盖或者锁屏,系统会调用()生命周期方法 ,暂停当前Activity的执行。(10分) A、onDestroy() B、onStop() C、onPasue()
D、以上都会调用 参考答案:C
答案说明:1. 启动Activity:系统会先调用onCreate()方法,然后调用onStart()方法,最后调用onResume()方法,Activity进入运行状态。
2. 当前Activity被其他Activity覆盖或者锁屏:系统会调用onPasue()方法,暂停当前Activity的执行。
3. 当前Activity由覆盖恢复到前台或者被解锁屏:系统会调用onResume()方法,再次进入运行状态。
4. 当前Activity转到新的Activity界面或者Home键回到主屏,自居后台:系统会调用onPasue()方法,然后调用onStop()方法,进入停滞状态。
5. 用户退回到此Activity:系统会调用onRestart()方法,然后调用onStart()方法,最后调用onResume()方法,再次进入运行状态。
6. 当前Activity处于被覆盖状态或者后台不可见状态:有的时候系统内存不足,会杀死该Activity,而后用户退回到该Activity时:再次调用onCreate(),onStart(),onResume()方法,进入运行状态。
7. 用户退出该Activity:系统会调用onPause()方法,然后onStop()方法,最后onDestroy()方法,结束该Activity。 2、
Intent中如果既要设置类型又要设置数据,需要使用()方法。(10分) A、setData(..) B、setType(..)
C、setDataAndType(..) D、setTypeAndData(..) 参考答案:C 答案说明:Intent.setData(data)和intent.setType(type)注意这两个方法会互相清除,意思就是:如果先设置setData(data)后设置setType(type),那么后设置的setType(type)会把前面setData(data)设置的内容清除掉,而且会报错,反之一样,所以如果既要设置类型与数据,那么使用setDataAndType(data,type)这个方法。 3、
使用() 管理器来完成发送短信的功能。(10分) A、ActivityManager B、WifiManager C、SmsManager
D、ConnectivityManager 参考答案:C
答案说明:ActivityManager 是与系统中所有运行着的Activity交互提供了接口,主要的接口围绕着运行中的进程信息,任务信息,服务信息等。
WifiManager 类似获得wifi链接名字,判断是否链接,开关等一些和无线相关; SmsManager 管理短信操作,如发送数据,文本和PDU短信; ConnectivityManager 主要管理网络连接相关操作; 多选题 共2题满分:20分 4、
intent传递数据时可以传递()类型的数据。(10分) A、Serializable B、charsequence C、Parcelable
共分享92篇相关文档