首页 文章 精选 留言 我的

精选列表

搜索[远程通讯],共10007篇文章
优秀的个人博客,低调大师

Android service ( 二) 远程服务

通常每个应用程序都在它自己的进程内运行,但有时需要在进程间传递对象,你可以通过应用程序UI的方式写个运行在一个不同的进程中的service。在android平台中,一个进程通常不能访问其他进程中的内存区域。所以,他们需要把对象拆分成操作系统能理解的简单形式,以便伪装成对象跨越边界访问。编写这种伪装代码相当的枯燥乏味,好在android为我们提供了AIDL工具可以来做这件事。 AIDL(android接口描述语言)是一个IDL语言,它可以生成一段代码,可以使在一个android设备上运行的两个进程使用内部通信进程进行交互。如果你需要在一个进程中(例如:在一个Activity中)访问另一个进程中(例如:一个Service)某个对象的方法,你就可以使用AIDL来生成这样的代码来伪装传递各种参数。 要使用AIDL,Service需要以aidl文件的方式提供服务接口,AIDL工具将生成一个相应的java接口,并且在生成的服务接口中包含一个功能调用的stub服务桩类。Service的实现类需要去继承这个stub服务桩类。Service的onBind方法会返回实现类的对象,之后你就可以使用它了,参见下例: 先创建一个IMyRemoteService.aidl文件 package org.allin.android.remote; interface IMusicControlService{ void play(); void stop(); void pause(); } 如果你正在使用eclipse的Android插件,则它会根据这个aidl文件生成一个Java接口类。生成的接口类中会有一个内部类Stub类,你要做的事就是去继承该Stub类: /** * @author allin.dev * http://allin.cnblogs.com/ * */ public class RemoteMusicService extends Service { private static final String TAG = "RemoteMusicService"; private MediaPlayer mediaPlayer; /* * (non-Javadoc) * * @see android.app.Service#onBind(android.content.Intent) */ @Override public IBinder onBind(Intent intent) { return binder; } private final IMusicControlServic<script type="text/javascript"><!--mce:1--></script>e.Stub binder = new IMusicControlService.Stub() { @Override public void stop() throws RemoteException { Log.d(TAG,"stop...."); if (mediaPlayer != null) { mediaPlayer.stop(); try { // 在调用stop后如果需要再次通过start进行播放,需要之前调用prepare函数 mediaPlayer.prepare(); } catch (IOException ex) { ex.printStackTrace(); } } } @Override public void play() throws RemoteException { Log.d(TAG,"play...."); if (mediaPlayer == null) { mediaPlayer = MediaPlayer.create(RemoteMusicService.this, R.raw.tmp); mediaPlayer.setLooping(false); } if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); } } @Override public void pause() throws RemoteException { Log.d(TAG,"pause...."); if (mediaPlayer != null && mediaPlayer.isPlaying()) { mediaPlayer.pause(); } } }; @Override public void onDestroy() { super.onDestroy(); Log.d(TAG, "onDestroy"); if(mediaPlayer != null){ mediaPlayer.stop(); mediaPlayer.release(); } } } 当客户端应用连接到这个Service时,onServiceConnected方法将被调用,客户端就可以获得IBinder对象。参看下面的客户端onServiceConnected方法: private ServiceConnection sc = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { musicService = null; Log.d(TAG, "in onServiceDisconnected"); } @Override public void onServiceConnected(ComponentName name, IBinder service) { musicService = IMusicControlService.Stub.asInterface(service); Log.d(TAG, "in onServiceConnected"); } }; 本文转自 一点点征服 博客园博客,原文链接:http://www.cnblogs.com/ldq2016/p/5216886.html,如需转载请自行联系原作者

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

远程提交Map/Reduce任务

1. 将开发好MR代码打包成jar。添加到distributed cache中。 Xml代码 bin/hadoopfs-copyFromLocal/root/stat-analysis-mapred-1.0-SNAPSHOT.jar/user/root/lib bin/hadoop fs -copyFromLocal /root/stat-analysis-mapred-1.0-SNAPSHOT.jar /user/root/lib 2. 在服务器端创建和你客户端一模一样的用户。创建目录 /tmp/hadoop-root/stagging/用户 3. 客户端提交job的代码 Java代码 Configurationconf=HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum","node.tracker1"); conf.set("fs.default.name","hdfs://node.tracker1:9000/hbase"); conf.set("mapred.job.tracker","node.tracker1:9001"); Jobjob=newJob(conf,"Hbase_FreqCounter1"); job.setJarByClass(FreqCounter1.class); Scanscan=newScan(); Stringcolumns="details";//commaseperated scan.addFamily(Bytes.toBytes(columns)); scan.setFilter(newFirstKeyOnlyFilter()); TableMapReduceUtil.initTableMapperJob("access_logs",scan,Mapper1.class,ImmutableBytesWritable.class, IntWritable.class,job); TableMapReduceUtil.initTableReducerJob("summary_user",Reducer1.class,job); /TableMapReduceUtil.addDependencyJars(job); DistributedCache.addFileToClassPath(newPath("hdfs://node.tracker1:9000/user/root/lib/stat-analysis-mapred-1.0-SNAPSHOT.jar"),job.getConfiguration()); job.submit(); Configuration conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum", "node.tracker1"); conf.set("fs.default.name", "hdfs://node.tracker1:9000/hbase"); conf.set("mapred.job.tracker", "node.tracker1:9001"); Job job = new Job(conf, "Hbase_FreqCounter1"); job.setJarByClass(FreqCounter1.class); Scan scan = new Scan(); String columns = "details"; // comma seperated scan.addFamily(Bytes.toBytes(columns)); scan.setFilter(new FirstKeyOnlyFilter()); TableMapReduceUtil.initTableMapperJob("access_logs", scan, Mapper1.class, ImmutableBytesWritable.class, IntWritable.class, job); TableMapReduceUtil.initTableReducerJob("summary_user", Reducer1.class, job); // TableMapReduceUtil.addDependencyJars(job); DistributedCache.addFileToClassPath(new Path("hdfs://node.tracker1:9000/user/root/lib/stat-analysis-mapred-1.0-SNAPSHOT.jar"),job.getConfiguration()); job.submit(); 4.运行java application,登陆node的MR管理页面,可以看到

资源下载

更多资源
Mario

Mario

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

Nacos

Nacos

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

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册