android笔记与面试

关于广播需注意的几点:

以发送intent为例,发送广播都用

1, Intent intent = new Intent();intent.setAction(ACTION1);

2, sendBroadcast(intent);

静态注册接收的时候,某一个类A继承BroadcastReceiver

1, 得到action,如:String action = intent.getAction();

2, 判断action类型,做出相应的动作 action.equals(ACTION1);

3, 在AndroidManifest.xml中静态注册广播

   <Receiver android:name = “A”>

   <intent-filter>

   <action android:name =”ACTION1”/>

   </intent-filter>

   </receiver>

动态注册接收的时候,new 一个广播BroadcastReceiver br = new BroadcastReceiver();

1,在onStart() 或者onCreat()中动态注册广播

1 IntentFilter intentFilter= new IntentFilter();

2intentFilter.addActionACTION1);可以添加多个

3)注册接收,registerReceiver(br,intentFilter);

     别忘了在其他需要的地方取消注册接收!!!unregisterReceiver(br);

4)得到action,如:string action = intent.getAction();
(5)
判断action类型,做出相应的动作action.equals(ACTION1);

=====================================================================================================

service需注意的几点:

MyService类中继承Service

1, MyBinder继承Binder类,在该中处理需要service传递的值

2, onBind()方法中返回MyBinder

 

Acitivity

1, new一个ServiceConnection,在ServiceConnection()方法中绑定IBinder,在onServiceDisconnected()中设置Service为空

2, this.bindService(Intent service, ServiceConnceion conn, int flags);

3, onDestroy()中解除绑定this.unbindService(sc);

=========================================================================================================

面试题目:

最近在面试的时候遇到一道题,在activity中有findViewById(R.id.name);这个name需要在运行的时候才知道,现在需要实现一个getString(R.String.name)这样的功能,方法如下:

public static String getValue(String key)。

     这个相当于对于<string name="hello">Hello</string>提供了key = hello.问如何得到value值Hello。从这道题看需要用反射,但由于我很少用反射,也没有研究过xml的反射机制,这道题就蒙了,后来查了半天资料是用的dom4j来解析xml,然后把key和value值放到一个hashmap中,这样就可以通过key值取到value值了。但是这样的方法有一个缺陷是当xml很大的时候这个方法就很影响效率了。下来后我才发现最简单也最有效的方法应该是:

    Field f;

        Class clazz = R.string.class;

         try {

            f = clazz.getDeclaredField("hello");

            String value = getString(f.getInt(R.string.class));

            System.out.println("value:"+value);

         }

         catch () {

         }

这样三步就搞定了。

 

还有一道数学题:

已知一个圆的圆心和半径,还一直一个线段的两个端点,问怎么知道这个线段有没有与圆相交。我就不想说我是数学专业的并且在面试中各种考虑不周到了。

现在想想觉得下面这种方法应该比较简单:

端点A与B是已知的,假设A(x1,y1) B(x2,y2)且x1<x2,y1<y2。现在用A B端点得到直线的方程,然后用圆的方程和直线的方程求相交点。如果没有相交点,说明线段和圆不相交;

如果有相交点一个,假设相交点为M(x,y),如果x1<= x <=x2,y1<= y <=y2,那么线段与圆相交。相交点为两个时,只要有一个点满足上面的条件就表示相交。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值