当前位置:  编程技术>移动开发
本页文章导读:
    ▪service bound(2)        service bound(二)service bound(二) service 绑定有三种实现方式: 1. 直接继承Binder类实现。       条件: 同一应用,同一进程 2. 使用Messenger实现。       条件:要在不同的进程间通信,这种方式.........
    ▪ AMD快要嫁他人        AMD将要嫁他人? 实际上从2009年初高通收购了AMD的移动设备资产后,业界就多次传出了高通将要整体收购AMD的消息,2012年9月就曾第一次有消息爆料高通将收购AMD全部资产,而在进入2013年后,.........
    ▪ 乐嘉,您快回来       乐嘉,你快回来   首次搭档孟非较默契 点评风格温柔不“毒舌”     点评方面,乐嘉在节目中往往会打断孟非的话,发表自己的看法,抑或单刀直入地分析男嘉宾的性格,以及指出他.........

[1]service bound(2)
    来源: 互联网  发布时间: 2014-02-18
service bound(二)

service bound(二)

service 绑定有三种实现方式:

1. 直接继承Binder类实现。

      条件: 同一应用,同一进程

2. 使用Messenger实现。

      条件:要在不同的进程间通信,这种方式不用考虑线程安全性。(单线程操作时使用)

3. 使用AIDL实现。

      条件:要在不同的进程间通信,并且需要多线程处理。要考虑线程之间的安全性。


通过Messenger实现bound service。

实现步骤:

  • service 要实现Handler,service通过Handler可以得到客户端的调用请求。
  • Handler用于创建Messenger对象。
  • Messenger创建一个IBinder,client调用onBind()时,IBinder返回给client的
  • Clients 通过IBinder实例化Messenger
  • service 通过Handler收到每一个Message, 在 handleMessage() 方法明确的处理.

---service 要实现Handler,service通过Handler可以得到客户端的调用请求。

class MessengerHandler extends Handler{
		@Override
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case REGISTER:
				if(msg.replyTo != null && !messengerList.contains(msg.replyTo)){
					messengerList.add(msg.replyTo) ;
				}
				Toast.makeText(getApplicationContext(), "bound", Toast.LENGTH_SHORT).show();
				break;
			case UNREGISTER:
				if(msg.replyTo != null && messengerList.contains(msg.replyTo)){
					messengerList.remove(msg.replyTo) ;
				}
				Toast.makeText(getApplicationContext(), "unbound", Toast.LENGTH_SHORT).show();
				break;
			case REPLYTO:
				Message message = Message.obtain(null, 1, 0, 0);
				Bundle data = new Bundle() ;
				data.putString("REPLYTO", "reply from service") ;
				message.setData(data) ;
				try {
					msg.replyTo.send(message) ;
				} catch (RemoteException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			default:
				super.handleMessage(msg);
				break;
			}
			
		}
	}



---Handler用于创建Messenger对象。

private Messenger messenger = new Messenger(new MessengerHandler()) ;


---Messenger创建一个IBinder,client调用onBind()时,IBinder返回给client的

@Override
	public IBinder onBind(Intent intent) {
		return messenger.getBinder();
	}


---Clients 通过IBinder实例化Messenger

@Override
		public void onServiceConnected(ComponentName name, IBinder service) {
			mService = new Messenger(service); //通过IBinder 实例化Messenger
			mBound = true ;
			registerService();
		}

---Service 通过Handler收到每一个Message, 在 handleMessage() 方法明确的处理.

try {
			Message msg = Message.obtain(null , MessengerService.REGISTER,0,0) ;
			msg.replyTo = mMessenger ;
			mService.send(msg) ;
		} catch (RemoteException e) {
			e.printStackTrace();
		}

Service的所有code:

package com.hualu.serviceexample.messenger;

import java.util.ArrayList;
import java.util.List;

import android.app.Service;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
import android.widget.Toast;

/**
 * 测试不在同一个进程中, 不需要考虑线程安全性
 * @author Administrator
 *
 */
public class MessengerService extends Service {

	final static int REGISTER = 1;
	final static int UNREGISTER = 2;
	final static int REPLYTO = 3;
	
	private Messenger messenger = new Messenger(new MessengerHandler()) ;
	private List<Messenger> messengerList = new ArrayList<Messenger>() ;
	
	@Override
	public IBinder onBind(Intent intent) {
		return messenger.getBinder();
	}
	
	class MessengerHandler extends Handler{
		@Override
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case REGISTER:
				if(msg.replyTo != null && !messengerList.contains(msg.replyTo)){
					messengerList.add(msg.replyTo) ;
				}
				Toast.makeText(getApplicationContext(), "bound", Toast.LENGTH_SHORT).show();
				break;
			case UNREGISTER:
				if(msg.replyTo != null && messengerList.contains(msg.replyTo)){
					messengerList.remove(msg.replyTo) ;
				}
				Toast.makeText(getApplicationContext(), "unbound", Toast.LENGTH_SHORT).show();
				break;
			case REPLYTO:
				Message message = Message.obtain(null, 1, 0, 0);
				Bundle data = new Bundle() ;
				data.putString("REPLYTO", "reply from service") ;
				message.setData(data) ;
				try {
					msg.replyTo.send(message) ;
				} catch (RemoteException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			default:
				super.handleMessage(msg);
				break;
			}
			
		}
	}

}

Activity 中所有的Code:

package com.hualu.serviceexample.messenger;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

import com.hualu.serviceexample.R;

public class MessengerActivity extends Activity implements OnClickListener{
	
	private Messenger mService ;
	
	private boolean mBound ;
	
	private Button messenger, unBound, replyFromService  ;
	private TextView text ;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		setContentView(R.layout.layout_binder_messenger) ;
		text = (TextView)this.findViewById(R.id.textView1) ;
		messenger = (Button)this.findViewById(R.id.messenger) ;
		unBound = (Button)this.findViewById(R.id.unbound) ;
		replyFromService = (Button)this.findViewById(R.id.reply_from_service) ;
		messenger.setOnClickListener(this) ;
		unBound.setOnClickListener(this) ;
		replyFromService.setOnClickListener(this) ;
		
	}
	
	private ServiceConnection conn = new ServiceConnection(){

		@Override
		public void onServiceConnected(ComponentName name, IBinder service) {
			mService = new Messenger(service); ;
			mBound = true ;
			registerService();
		}

		@Override
		public void onServiceDisconnected(ComponentName name) {
			mService = null;
			mBound = false ;
		}
		
	} ;
	
	@Override
	protected void onStart() {
		super.onStart() ;
		boundService() ;
	};
	
	@Override
	protected void onStop() {
		super.onStop() ;
		if(mBound){
			unbindService(conn);
			mMessenger = null;
            mBound = false;
		}
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.messenger:
			boundService();
			break;
		case R.id.unbound:
			unBoundService() ;
			break ;
		case R.id.reply_from_service:
			replyFromService() ;
			break;
		}
	}

	private void boundService() {
		bindService(new Intent("com.hualu.serviceexample.BIND_MESSENGER_SERVICE"), conn, Context.BIND_AUTO_CREATE) ;
		text.setText("bound") ;
	}
	
	private void registerService(){
		try {
			Message msg = Message.obtain(null , MessengerService.REGISTER,0,0) ;
			msg.replyTo = mMessenger ;
			mService.send(msg) ;
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

	private void replyFromService() {
		if(mService != null){
		try {
			Message msg = Message.obtain(null , MessengerService.REPLYTO,0,0) ;
			msg.replyTo = mMessenger ;
			mService.send(msg) ;
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		}
	}

	private void unBoundService() {
		if (mBound) {
			if(mService != null){
				Message msg = Message.obtain(null , MessengerService.UNREGISTER,0,0) ;
				msg.replyTo = mMessenger ;
				try {
					mService.send(msg) ;
				} catch (RemoteException e) {
					e.printStackTrace();
				}
			}
			unbindService(conn) ;
			mBound =false;
			mService = null;
			text.setText("unbound") ;
		}
	};
	
	private Messenger mMessenger = new Messenger(new MessengerActivityHandler()) ;
	
	class MessengerActivityHandler extends Handler{
		@Override
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case 1:
				Bundle data = msg.getData() ;
				String str = data.getString("REPLYTO");
				text.setText(str) ;
				break;

			default:
				super.handleMessage(msg);
				break;
			}
			
		}
	}
	
}

在activity和service中,实现了双向通道,既可以从activity中发送消息给service,也可以从service中发送消息给activity。都是通过Messenger实现的。

activity中的registerService()和unBoundService()方法,发送消息到service中;

replyFromService()是既发送消息到service中,又收到service返回的消息。

与上面说的对应的是在service里面的Handler的handleMessage()里面


Layout文件的代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:orientation="vertical" >

    <Button
        android:id="@+id/messenger"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/messenger" />

    <Button
        android:id="@+id/unbound"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/unbound_messenger" />

    <Button
        android:id="@+id/reply_from_service"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/reply_from_service" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="TextView" />

</LinearLayout>

Manifest中相关的code:

<activity android:name=".messenger.MessengerActivity">
          <intent-filter>
       		    <action android:name="com.hualu.serviceexample.BIND_MESSENGER_ACTIVITY"></action>
       		    <category android:name="android.intent.category.DEFAULT"></category>
       		</intent-filter>
        </activity> 
        <service android:name=".messenger.MessengerService">
            <intent-filter>
                <action android:name="com.hualu.serviceexample.BIND_MESSENGER_SERVICE"></action>
            </intent-filter>
        </service>



    
[2] AMD快要嫁他人
    来源: 互联网  发布时间: 2014-02-18
AMD将要嫁他人?

实际上从2009年初高通收购了AMD的移动设备资产后,业界就多次传出了高通将要整体收购AMD的消息,2012年9月就曾第一次有消息爆料高通将收购AMD全部资产,而在进入2013年后,这样的消息依然不断的被传出,虽然后来它们都被证实只是谣言。

2013年4月5日,一名带有官方认证的微博用户爆料称高通已全面收购AMD,此微博一出引起业界哗然。不过随后AMD大中华区董事总经理潘晓敏就 辟谣称没有听说高通已经收购AMD,而AMD中国负责公关的负责人随后也确认AMD中国并没有获得类似的消息,并对这样的传闻不做任何评价。

那么,为什么高通屡次被传闻将收购AMD,如果真的完成收购将会对芯片生产领域乃至整个业界产生什么样的影响呢?

AMD总部位于美国加州硅谷内森尼韦尔,主要业务集中在PC中央处理器、图形处理器、闪存、芯片组以及其他半导体技术,是目前在Cpu芯片领域唯一能够与英特尔抗衡的厂商。

高通是全球通信行业的重要芯片和技术厂商,总部位于美国加州圣迭戈市,它所持有的CDMA通讯制式被国际电信联盟(ITU)认可成为全球2G标准之一。

有收购先例的高通:

2009年1月20日,高通公司宣布以6500万美元的价格收购了AMD所持有的移动终端业务,一同收购的部分还包括与之相关的多媒体技术资产、知识产权和相关的研发与技术人员。

根据双方当时的协议,高通将继续雇佣AMD负责移动终端业务的所有团队,这些团队负责研发包括2D与3D图形、音频、视频、显示和架构领域在内的移动终端技术。高通中国的相关人士在解释这次收购时,强调这一行为将帮助高通进一步巩固其在移动芯片设计领域的领先优势。

收购完成后,时任高通执行副总裁Steve Mollenkopf曾表示:

“AMD在移动终端领域业务的多媒体性能够直接融合到高通的芯片产品中。”

实际上AMD将移动终端业务剥离并出售给高通,是因为当时他们正受到金融危机的强烈冲击,以主动剥离非核心业务来保持公司正常运转,对此事件,时任AMD首席运营与行政官兼首席财务官的Robert J. Rivet表示:

“AMD将把更多的精力集中在X86构架和芯片以及高端的图形芯片领域这类的核心业务上来。”

所以,有了这次收购行动,在后来的几年中,一旦AMD在公司层面经营不顺利,就会出现将会被高通收购的传言,不过深陷收购AMD传闻的公司,可不止高通一家。

业界众多大佬牵扯收购AMD疑云


2012年8月,又有传言称高通将收购AMD,而在刚更换了首席销售官不久,三星也被添加进了收购AMD的名单中,实际上除了三星和高通,还有几家业界大佬也被传言将收购AMD。

这一次收购传闻,缘于AMD下调了2012年第二财季的营收预期,由于财政营收达不到预期,加之市场份额处于增长缓慢的阶段,股价也一度跌至4美元左右,于是AMD将被收购的流言便四散开来,而在传闻中除了高通,三星,苹果和英特尔榜上有名。

三星在2012年初招募了多位来自AMD的服务器芯片开发人员,业界猜测三星将要进军低端服务器市场,而收购AMD也并非三星不能做到的事情,利用AMD的专利技术,三星可以在专利层面摆脱苹果的纠缠,也能够吸收AMD在图形处理等领域的优势。

苹果通过收购AMD可以为旗下的笔记本产品提供价格更低的处理器芯片,甚至在将来为苹果的移动终端提供芯片,并进一步完善苹果封闭的智能生态系统。

而对于英特尔来说,直接收购市场中最大的竞争对手,也是一个不错的选择,尤其是利用AMD在收购ATI后快速成长的图形处理技术,可以帮助自己更好的发展这部分的芯片业务。

实际上,业界大佬大多对收购AMD没有兴趣

谣言总是能够很快的传播出去,而事实总也是按照现实发展的规律逐步展现,AMD将被各类公司收购的消息已经流传多年,如果从AMD和被传言涉及的公司现实状况来看,很多流言都经不起细致的推敲。

从技术的角度上来说,无论是高通还是三星,在ARM构架盛行的今天,收购AMD的业务是没有意义的,相反的这些公司都在大举挖角的旗帜,不断从AMD挖来他们所需的技术人员,这一点就足够了也就无需化大价钱来收购整个AMD。

对于英特尔来说,X86构架的芯片组已经由Surface Pro等设备证明可以高效,便携的使用在移动终端上,所以也不需要收购对手来达到在移动终端市场的扩张。

其次,AMD手中握有的专利价值并不高,从处理器行业的角度来看,在进入移动终端高速发展的今天,厂商更愿意从ARM手中购买专利技术,而不是技术相对落后并且没有完整移动芯片产品线的AMD。

虽然AMD市值只有20亿美元,但收购方依然要承担超过10亿美元的净债务,即使上述这些公司完全有财力收购AMD,但依然要考虑收购后所带来的债务压力。

微软怎么看

作为忠实的合作伙伴和产品支持者,高通对于微软的重要性不言而喻,从MWC 2013上高通与微软的互动就能看出。智能手机领域中,Snapdragon在Windows Phone中的使用,就是良好合作的开端。而在面对Windows 8和Windows RT设备的发展中,微软采取了不同的战略,目前基于Windows 8系统的移动终端选择的是英特尔的X86构架,而作为Windows RT设备标杆的Surface RT则使用的是NVIDIA的ARM架构芯片。照目前的发展情况来看,下一代的Surface RT产品将很有可能放弃NVIDIA的芯片,如果使用高通或者其他厂商的芯片,那么势必会引起整个平板市场的剧烈变动。

但如果AMD真的被高通收购了


面对英特尔在PC处理器市场以及ARM在移动芯片市场的垄断时,高通曾在2011年表示要谋求Windows 8的帮助,来打破目前市场的局面。高通首先希望通过在智能手机、平板电脑,甚至PC中推广Snapdragon处理器,来扩大在移动处理器领域的领先地 位。然后高通借助收购AMD更进一步的进入PC、服务器市场,提供全平台的芯片方案,完成对英特尔的合围。

对于普通消费者来说,如果高通加入到这一领域,引入更多的竞争机制将会导致今后购买Windows 8系统的移动终端的费用将大大降低。

AMD何去何从


英特尔和AMD称霸芯片市场的局面已一去不返,ARM和高通的快速崛起将对传统芯片生产行业造成巨大的冲击,身陷囹圄的AMD要么通过自身产业重 组,提出新的发展战略突破难关,要么就等待宣布破产,出售持有的专利和业务来偿还债务。如果一心想要通过其他公司以收购自己的方式存活,那么就只能证明 AMD的时代已经终结。


    
[3] 乐嘉,您快回来
    来源: 互联网  发布时间: 2014-02-18
乐嘉,你快回来
引导语:知名编剧于正代班乐嘉担任江苏卫视《非诚勿扰》节目的情感点评嘉宾,节目播出之前就引起了不少关注,而在节目开始前,于正还发了一条微博为自己打气。
 

于正代班“非诚勿扰”
 
    知名编剧于正代班乐嘉担任江苏卫视《非诚勿扰》节目的情感点评嘉宾,节目播出之前就引起了不少关注,而在节目开始前,于正还发了一条微博为自己打气。4月6日播出他代班的首期节目中,于正和孟非、黄菡的搭档比较默契,并未出现冷场的情况,而他的点评风格也相对温柔,他还在节目中说了不少金句。
 
  此外,网友对于正出现在《非诚勿扰》中的看法也是两极分化,但大多数网友的态度还是希望乐嘉能够早点回归。
 
  首次搭档孟非较默契 点评风格温柔不“毒舌”
 
  于正的不少作品都被观众所熟悉,虽然也上过不少电视节目,但是在节目中担任情感点评嘉宾却从未有过。在节目播出之前,他还发了一条微博给自己打气,“要播出了,是骡是马好歹得亮一回相,虽然我属马,这次就先把自己看成个骡,各位大仙若有时间就点拨点拨,好的话我就回去减肥,争取下回表现得好点,不好的话,就吐槽吐到我再也不敢出来吓人,正能量开启。”
 
  此次于正担任《非诚勿扰》点评嘉宾,给人最直观的感觉就是“温柔”,但和乐嘉相比,他的气场则较弱。虽然是首次担任情感节目点评嘉宾,但于正在节目中和孟非、黄菡的配合却比较默契,并未出现尴尬、冷场等情况。
 
  点评方面,乐嘉在节目中往往会打断孟非的话,发表自己的看法,抑或单刀直入地分析男嘉宾的性格,以及指出他在节目中的不足等。于正的点评则更偏于发表自己对嘉宾爱情观的看法等。
 
  而他也是金句连连,对于节目中男嘉宾不确定自由恋爱到底是对是错,于正直言,“得不到父母祝福,就产生了自由恋爱是错误的的想法,这个想法不对。趁着年轻想爱就爱,想干嘛就干嘛,别有那么多限制,年轻人错就错了,还有机会再改,如果连错的机会都不给自己,那你的人生就一塌糊涂。”
 
  不仅如此,台上女嘉宾表示国外男人比中国男人身材好时,于正还幽默地拿自己举例,“怎么说话呢?怎么说话呢?你怎么能把自己说成这样呢,尤其我还坐在这里呢!”
 
  网友看法两极化 呼吁乐嘉快回归
 
  对于于正首次代班乐嘉坐镇嘉宾席,网友的态度也是两极分化,有些网友觉得于正的点评温柔,幽默,不像乐嘉点评那么犀利。不过,更多的网友对于正参加《非诚勿扰》持反对态度,直言他不适合这一舞台,并呼吁乐嘉快点回归。
 
  腾讯网友“兰子若”直言,于正有可能会拉低节目的收视率,“新《笑傲江湖》(观剧)于正走马上任《非诚勿扰》了,关于乐嘉缺席一事众说纷纭。看了三年的《非诚勿扰》,我已经习惯了乐嘉的睿智、幽默、犀利。所以并不看好于正代班,长期下来,估计会对非诚的收视率产生影响。并且,纵观《笑傲江湖》被于正弄的乌烟瘴气,希望乐师傅早日回归。”
 
  而网友“莫失莫忘嗳” 也戏谑地表示,“如果于正来,我觉得也许《非诚勿扰》会变成苦情虐心剧。”
  不仅如此,还有网友将于正上《非诚勿扰》和此前他被打联系到了一起,并称于正此前被打也是为了这次上节目炒作。
 
  不过,喜欢于正风格的网友也表示,他首次亮相《非诚勿扰》不招人讨厌,而且还让人很有眼缘。还有网友直言,于正的的点评亲切、真诚,而且很温暖,相比之下,乐嘉的点评会让人有些不舒服。
 
  于正首期节目语录:
 
  我就是喜欢美人,我上场前认真看了女嘉宾们的资料,太多美人啦。
 
  喜欢御姐,就是说明你喜欢被大女人驾驭。
 
  我觉得第一次心动就叫初恋了。
 
  美人是人好、心好,外形不重要,美人来自于心灵美。
 
  如果在女生眼里你的缺点也是优点,那赶紧把她牵走吧。
 
  趁着年轻想爱就爱,想干嘛就干嘛,别有那么多限制,年轻人错就错了,还有机会再改,如果连错的机会都不给自己,那你的人生就一塌糊涂。
 
    编后语:喜欢于正风格的网友表示,他首次亮相《非诚勿扰》不招人讨厌,而且还让人很有眼缘。还有网友直言,于正的的点评亲切、真诚,而且很温暖,相比之下,乐嘉的点评会让人有些不舒服。

    
最新技术文章:
▪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