存档

‘Java’ 分类的存档

JVM世界,它们可更多关注

2016年4月15日 没有评论

最近拟了下要使用的语言和框架,主要以Java和Scala为核心,供大家参考。

Image Image Image Image

Image ImageImageImage

http://openjdk.java.net/ JVM世界的核心语言 OpenJDK @ 灰狐百科

http://scala-lang.org/ 面向对象的函数式编程 Scala @ 灰狐百科

https://github.com/akka/akka 高并发、容错、事件驱动基础设施 Akka @ 灰狐百科

https://github.com/playframework/playframework Java & Scala Web框架 Play @ 灰狐百科

http://spark.apache.org/ 大数据、快数据 Spark @ 灰狐百科

https://github.com/lagom/lagom 微服务框架

https://github.com/slick/slick  函数关系型映射

https://github.com/typesafehub/activator  Scala, Akka, Play 工具

此外,作为JVM世界的Lisp方言,大家重点关注Clojure。

http://wiki.huihoo.com/wiki/Clojure 了解下。

后端数据存储、数据库强力推荐 Apache Cassandra

分类: Java 标签:

在Android应用中调用RESTful服务

2012年5月14日 没有评论

REST是一个被广泛采用的架构模式,尤其在API、Web Services、云计算流行的大环境下,所有主流的互联网厂商都提供了其服务的REST接口,用户可采用JSON、XML格式使用HTTP进行方法调用和数据传输。

RESTful已成为主流客户-服务器编程模式,在手机端与后端系统的交互中也被普遍采用。

现在我们就来分析下Android环境下的RESTful编程模式和一般方法。

错误的实现方式

这个做法会导致:

  • 操作系统shutdown这个进程;
  • 数据不能持久化保存。

而正确处理REST方法通常有三种设计模式:

  • 使用 Service API
  • 使用 ContentProvider API
  • 使用 ContentProvider API 和 SyncAdapter

其中,Service Helper的作用是:

以单体(Singleton)的方式暴露一个简单的异步API给用户接口使用。

• 准备和发送服务请求

– 检测方法是否已经被挂起

– 创建请求意图

– 添加操作类型和一个唯一的请求id号

– 添加方法的特殊属性值

– 添加binder回调

– 调用startService(意图)

– 返回请求id号

• 处理从服务返回的回调

– 将回调分发给用户接口监听器

实战一下:

An attempt at implementing a RESTful Android application 开始RESTful Android应用的尝试

git clone https://github.com/jeremyhaberman/restful-android.git

在 eclipse > file > import >  Existing Projects into Workspace

Debug As Android Application,这里使用了Simple OAuth library for Java第三方库

如通过Twitter API使用OAuth验证

import com.jeremyhaberman.restfulandroid.rest.Request;

// RESTful Android Twitter app settings

private static final String TWITTER_API_KEY = “ssdfiwKoedslVjUsngtow”;

private static final String TWITTER_API_SECRET = “sdfsIkkmIKLFDvzaLdnBeLAVkwPFUxxZ9Ulf8fkY”;

private static final String TWITTER_CALLBACK_URL = “restful-android://callback”;

总结:

  • 不要在Activities里实现REST方法;
  • 从一个服务中启动长时间运行的操作;
  • 持久要早、要经常(Persist early & persist often)
  • 最大限度的减少网络使用(Minimize the network usage);
  • 是不是在关键时刻使用同步适配器执行后台操作(Use a sync adapter to execute background operations which are not time critical),使用Android Cloud to Device Messaging。

参考:

分类: Java, Mobile & Embedded 标签: ,

【Android】制作appwidget桌面相册幻灯片

2012年5月2日 没有评论

最近在学习android的appwidget,看了一些文章,决定做一个相册幻灯片来练手,下面写写过程来给大家共享:

  1. 在项目的res/xml/下建立一个appwidget_info.xml文件,内容如下:
    <?xml version=”1.0″ encoding=”utf-8″?>
    <appwidget-provider xmlns:android=”http://schemas.android.com/apk/res/android”
    android:initialLayout
    =”@layout/appwidget”
    android:minHeight
    =”800dp”
    android:minWidth
    =”240dp”
    android:updatePeriodMillis
    =”300000″ >

    </appwidget-provider>

    在这里定义appwidget的基本信息,宽度,高度,以及刷新的频率等

  2. 在layout/下建立appwidget的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:gravity
    =”center”
    android:orientation
    =”vertical”
    android:padding
    =”20dp” >

    <Button
    android:id=”@+id/button1″
    android:layout_width
    =”120dp”
    android:layout_height
    =”wrap_content”
    android:layout_gravity
    =”center_horizontal”
    android:text
    =”播放图片” />

    <ImageView
    android:id=”@+id/imageView1″
    android:layout_width
    =”fill_parent”
    android:layout_height
    =”fill_parent”
    android:background
    =”#FFFF”
    android:padding
    =”2dp”
    android:scaleType
    =”fitXY”
    android:src
    =”@drawable/p1″ />

    </LinearLayout>

    这个layout比较简单,里面仅仅包含一个button和一个imageview,设置 android:padding=”2dp”来让图片有一个简单的边框样式

  3. 建立MyAppWidgetProvider继承AppWidgetProvider,重写父类的生命周期函数,这里的原理google一下有很多,就不多写了。首先重写onUpdate,这个方法在appwidget第一次加载时会被调用,在这里我们主要使用ContentResolver查询出本机所有图片;接下来新建一个PendingIntent将图片路径的集合封装到其中,最后将pendingIntent设置给button
    Intent intent = new Intent(“com.jaredluo.appwidget.change”);
    intent.putExtra(
    “path”, pathStrArr);for (int j = 0; j < appWidgetIds.length; j++由于appwidget与主程序处于不同的进程中,所以通讯都需要依靠PendingIntent。

    ) {
    //RemoteView是appwidget中很重要的一个类,基本上对appwidget中
    //所有控件的操作都要基于RemoteView来操作

    RemoteViews remoteView
    = new RemoteViews(context.getPackageName(),
    R.layout.appwidget);
    remoteView.setOnClickPendingIntent(R.id.button1, pIntent);
    appWidgetManager.updateAppWidget(appWidgetIds[j], remoteView);
    remoteView
    = null;
    }

    //设置pending,发送广播,注意设置
    //PendingIntent.FLAG_UPDATE_CURRENT
    //否则onRecieve函数中接收不到intent中的数据
    PendingIntent pIntent = PendingIntent.getBroadcast(context, 0

    , intent,PendingIntent.FLAG_UPDATE_CURRENT);
  4. 接下来在onReceive中接收我们刚才设置给button的广播,首先新开一个线程控制图片的播放,接下来在Handler中为ImageView设置图片源
    final RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.appwidget);
    String path
    = paths[msg.getData().getInt(“i”)];
    remoteViews.setImageViewBitmap(R.id.imageView1,BitmapUtil.getBitmap(path,
    200, 200));
    appWidgetManager.updateAppWidget(componentName,remoteViews);

    这里需要注意一个问题,我在把图片设置给appwidget时,跑不了几张图片就会出现!!! FAILED BINDER TRANSACTION !!!这个错误,最先以为是图片太大造成的,结果压缩图片也无果;后面在网上搜索一番发现:Binder data size limit is 512K 由于传输图片到appwidget进程中的Binder最大数据量是512k,并且RemoteView也不会每次清理,所以如果每次都使用同一个RemoteView进行传输会因为溢出而报错。最后每次都新建一个RemoteView问题才解决掉。

看看最后的效果,点击播放图片按钮,图片就开始更替:

代码还有很多问题和不完善,接下来有空会继续修改。

分类: Java, Mobile & Embedded 标签:

在 Nokia N800 上运行 OSGi

2008年3月21日 没有评论

java-and-osgi-on-n800.jpg

作者通过简单的步骤就在 Nokia N800 上运行起了 OSGi, 这里的OSGi选用了 Eclipse Equinox.

有 Nokia N800 的朋友也可实验一下.

分类: Java, Mobile & Embedded 标签:

EJB 3.1 草案

2008年3月21日 没有评论

Ken Saks (EJB 3.1 规范组Leader) 在其博文中介绍了 EJB 3.1 的新特性和增强功能.主要包含以下几个方面:

  • .war packaging of EJB components
  • Optional Local Business Interfaces
  • EJB “Lite”
  • Portable EJB Global JNDI Names
  • Singletons
  • Application Initialization and Shutdown Events
  • EJB Timer Service Enhancements
  • Simple Asynchrony

更多相关信息:

分类: Java 标签:

百度开始部署Java应用

2007年11月24日 没有评论

在我的印象中, 百度、迅雷等公司应该多采用 C, C++ 构建其Web应用,最多也就再加入 Python, PHP, Perl 等脚本语言。使用 Java 是否与这些公司没有太大关系。今天访问百度,偶然发现类似 http://game.baidu.com/gl.jsp?aid=11957158978141059 的连接,第一反应是不是用了Java ,用 curl 工具查看了一下 :

$ curl -I http://game.baidu.com/
HTTP/1.1 302 Found
Date: Fri, 23 Nov 2007 14:32:39 GMT
Server: Apache/1.3.36 (Unix) Resin/2.1.17
Cache-Control: private
Location: http://game.baidu.com/
Set-Cookie: JSESSIONID=ds626cdKgMya; path=/
Connection: close
Content-Type: text/html; charset=gbk

果然使用了 Java 技术,并且使用了高效、轻量级服务器 Resin

从访问的效果来看,速度还挺快,看来百度也在试水 Java 的大规模应用。