首页 文章 精选 留言 我的

精选列表

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

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管理页面,可以看到

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

RustDesk 1.3.8 开源远程桌面

已添加 跨平台文件复制和粘贴,复制到 macOS 尚未准备好 设备组 更改 允许 - (破折号) 在 ID 中 将受控 Android 上的右键单击行为更改为长按 将“组”选项卡更改为“可访问设备” 修复 Window 10 和 macOS 窗口边框 优化被控移动设备触摸移动 单击 ID 行时冻结 (#10795) 更新说明:https://github.com/rustdesk/rustdesk/releases/tag/1.3.8 顶级 Rust 开源项目期待你的加入,请发送简历到emhvdUBydXN0ZGVzay5jb20gICA=

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

RustDesk 1.3.1 发布,远程桌面

新增 四个新的高级选项: one-way-clipboard-redirection / one-way-file-transfer ( #7837 ) sync-init-clipboard ( #9010 ) allow-logon-screen-password ( #9269 ) 修改 优化文件传输窗口 ( #9153 ), 状态列表 ( #9117 , #9166 ) 响应式 UI ( #9235 ) 把 libappindicator 改成 libayatana-appindicator, 并且改成推荐依赖 ( #9364 ) 默认禁止剪贴板初始化同步 ( #9010 ) 修复 1.2.7 引入的 cm bug ( #9127 ) Macos 鼠标侧键 ( #9185 ) Android ios, 局域网发现 ( #9207 ) 更多 waiting for image 由于硬件编解码导致的问题 ( #9242 ) 特殊密码 ( #9232 ) Excel 拷贝粘贴 ( #9252 ) Linux 下特定情况窗口反复关开 ( #9254 ) 泄露: Windows ffmpeg 泄露 (#9266) Windows --service 泄露 (#8651) Mac --server 修楼 (#cacca72) Flutter 泄露 (#9331, #9392) 非英文字母密码大小写 ( #9342 ) Sciter 键盘失效 ( #9143 ) 误删虚拟显示器 ( #9366 ) 替换 pkexec ( #9286 ) Hotkey, linux-> win 翻译模式 ( #9406 ) Wayland下光标适配 (Flatpak) ( #8524 ) 另外,我们团队正在 [招聘]

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

RustDesk 1.3.0 发布,远程桌面

RustDesk 1.3.0 版本发布,https://github.com/rustdesk/rustdesk/releases/tag/1.3.0 新加 剪贴板多格式支持, html/rtf (#8733) 发送剪贴板字符 (#5451) 活动标签边框(#8832) MSI 创建桌面和开始菜单快捷方式的选项 (#8829) 通过命令行将客户端添加到地址簿/标签(#7866) 通用apk, ARM64 / ARM32 / X86_64 (#8941) PIN 解锁 (#7656) 信任当前设备2FA 选项 (#8513) 在文件传输窗口中重命名文件和文件夹(#7758) 修改 新连接后保持窗口位置(#8834) Vcpkg ffmpeg (#8764) 在 Linux 上删除 --tray 的自动启动条目(#4863) 在 Android 上使用 JNI MediaCodec 支持的硬件编解码器,这可能会解决一些等待图像的问题(#8985) 断开连接时删除虚拟显示器(#8044) 修复 左右滚轮反转(#1169) 存占用巨大(#8883) 音频延迟累积(#534) Sciter 与 Rust 不兼容(#8856) 默认情况下不选择乌克兰语翻译(#8923) 触控板,反向水平滚动(#8827) Debian 无法解锁设置(#8719) 最大化控制窗口后,无法看到 Windows 任务栏图标的活动栏(#8979) 隐私模式 2 不起作用(#8994) 启用允许删除壁纸后无法连接(#9053) Windows 上的顶部边缘调整大小(#9081) macOS 上的 Dock 图标频繁弹跳(#9088) 剪贴板逻辑仍然损坏(多个连接)(#7321) Fedora 上崩溃(#9051) 另外,我们团队正在 [招聘](https://rustcc.cn/article?id=6eb4b4d9-f629-4f0a-ace7-1a3f7b5c8fff)

资源下载

更多资源
Mario

Mario

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

Nacos

Nacos

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

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。