FanfouWidget.class

继续 代码学习1  因为重新编辑文章经常出现格式错乱,所以以后先写在记事本里面了

继续上次的发送消息

// 发送消息给widget

Intent reflogin = new Intent(this.getBaseContext(), FanfouWidget.class);

FanfouWidget.class继承自BroadcastReceiver..接收消息后执行onReceiver()方法

public void onReceive(Context context, Intent intent) {

if (!TwitterApplication.mApi.isLoggedIn()) {

//如果没有登录,将页面文本设置为请登录,替换其它文本为空

refreshView(context);

} else {

//已经登录

super.onReceive(context, intent);

String action = intent.getAction();

if (NEXTACTION.equals(action) || PREACTION.equals(action)) {

refreshView(context, intent.getAction());

} else if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)) {

update(context);

}

}

}

//没有登录的操作

private void refreshView(Context context) {

//指明一个组件,参数为组件包名.类名

ComponentName fanfouWidget = new ComponentName(context,

FanfouWidget.class);

AppWidgetManager manager = AppWidgetManager.getInstance(context);

//将bulidLogin返回的RemoteViews类型的值所有appwidget的实例设置给定的组件fanfouWidget

manager.updateAppWidget(fanfouWidget, buildLogin(context));

}

//将原有标题替换为请登录,并删除其它的值

private RemoteViews buildLogin(Context context) {

RemoteViews updateViews = new RemoteViews(context.getPackageName(),

R.layout.widget_initial_layout);

updateViews.setTextViewText(R.id.status_text,

TextHelper.getSimpleTweetText("请登录"));

updateViews.setTextViewText(R.id.status_screen_name, "");

updateViews.setTextViewText(R.id.tweet_source, "");

updateViews.setTextViewText(R.id.tweet_created_at, "");

return updateViews;

}

//已经登录

//根据userid去sqllite里面取出用户信息,然后显示到页面

//取出图片

/**

* 取图片, 可能直接从cache中返回, 或下载图片后返回

*/

public Bitmap get(String url, ImageLoaderCallback callback) {

Bitmap bitmap = ImageCache.mDefaultBitmap;

if (mImageManager.isContains(url)) {

bitmap = mImageManager.get(url);

} else {

// bitmap不存在,启动Task进行下载

mCallbackManager.put(url, callback);

startDownloadThread(url);

}

return bitmap;

}

public interface ImageCache {

public static Bitmap mDefaultBitmap = ImageManager

.drawableToBitmap(TwitterApplication.mContext.getResources()

.getDrawable(R.drawable.user_default_photo));

public Bitmap get(String url);

public void put(String url, Bitmap bitmap);

}

public class ImageManager implements ImageCache {

.....

//取出图片

//先将图片地址放入到List<>中,然后使用线程....

}

private void startDownloadThread(String url) {

if (url != null) {

//将图片地址存放到list中

addUrlToDownloadQueue(url);

}

// Start Thread

State state = mTask.getState();

//使用已有的线程

if (Thread.State.NEW == state) {

mTask.start(); // first start

} else if (Thread.State.TERMINATED == state) {

//如果线程为终止状态,则启动新的线程

mTask = new GetImageTask(); // restart

mTask.start();

}

}

...

@Override

public void run() {

try {

//private volatile boolean mTaskTerminated = false; 当执行完run方法后在finally里面设置为true;

while (!mTaskTerminated) {

String url;

//isPermanent默认为true ,提供了set方法,可以改变其值

if (isPermanent) {

//private BlockingQueue mUrlList = new ArrayBlockingQueue(50);

//Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Queue接口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是//Queue时,就完全只能访问Queue接口所定义的方法了,而不能直接访问LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。BlockingQueue 继承了Queue接口。

//队列是一种数据结构.它有两个基本操作:在队列尾部加人一个元素,和从队列头部移除一个元素就是说,队列以一种先进先出的方式管理数据,如果你试图向一个已经满了的//阻塞队列中添加一个元素或者是从一个空的阻塞队列中移除一个元索,将导致线程阻塞.在多线程进行合作时,阻塞队列是很有用的工具。工作者线程可以定期地把中间结果存//到阻塞队列中而其他工作者线线程把中间结果取出并在将来修改它们。队列会自动平衡负载。如果第一个线程集运行得比第二个慢,则第二个线程集在等待结果时就会阻塞。如//果第一个线程集运行得快,那么它将等待第二个线程集赶上来。

//take 移除并返回队列头部的元素 如果队列为空,则阻塞

url = mUrlList.take();

} else {

//poll 移除并返回队列头部的元素 如果队列为空,则返回null

url = mUrlList.poll(TIMEOUT, TimeUnit.SECONDS); // waiting

if (null == url) {

break;

} // no more, shutdown

}

// Bitmap bitmap = ImageCache.mDefaultBitmap;

final Bitmap bitmap = mImageManager.safeGet(url);

// use handler to process callback

final Message m = handler.obtainMessage(HANDLER_MESSAGE_ID);

Bundle bundle = m.getData();

bundle.putString(EXTRA_IMAGE_URL, url);

bundle.putParcelable(EXTRA_BITMAP, bitmap);

handler.sendMessage(m);

}

} catch

参考文献

appwidget简单入门和学习笔记

阻塞队列(BlockingQueue)

下一章:fanfou 如何定义httpException 取得图片部分

饭否android客户端,fanfou(饭否) android客户端 代码学习二相关推荐

  1. android+饭否+开源,fanfou(饭否) android客户端 代码学习一

    fanfou(饭否) android客户端 代码学习1 LoginActivity.class类 Intent intent = getIntent().getParcelableExtra(Inte ...

  2. 【Android 逆向】Android 逆向通用工具开发 ( Android 端远程命令工具 | Android 端可执行程序的 main 函数操作 | TCP 协议服务器建立 | 接收客户端数据 )

    文章目录 前言 一.Android 端可执行程序的 main 函数操作 二.Android 端 TCP 协议服务器建立 三.Android 端接收 PC 端传来的数据 四.博客资源 前言 本篇博客重点 ...

  3. android电商平台,基于Android的电商平台通用客户端的设计与实现

    摘要: 随着移动互联网的高速发展,电子商务已经由过去的PC端逐渐进入了移动时代.一方面,对于处于创业阶段的电商平台运营者来说,由于资金不足,开发人员不足,很难在短时间内拥有电商平台的手机客户端.另一方 ...

  4. android手机照片传苹果电脑版,为知笔记Android/iPhone客户端图片传到电脑客户端的方法介绍...

    为知笔记是一款时下流行的支持多平台的云笔记软件,随时随地记录和查看有价值的信息,非常方便.当我们在用为知笔记电脑客户端编辑笔记时,常有从手机相册中取图片素材的需求,下面小编就来教教大家为知笔记手机传图 ...

  5. 多个android手机客户端通信,android中利用Socket实现手机客户端与PC端进行通信

    服务器端: import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; impo ...

  6. 视频教程-仿淘宝客户端电商平台android初级速成-Android

    仿淘宝客户端电商平台android初级速成 北风网技术总监,在某大型电信设备公司担任架构师,主要从事电信领域的软件开发,经验丰富.对电信计费系统以及核心网软件系统有深入了解,对设计高可靠性,高扩展性的 ...

  7. 仿淘宝客户端电商平台android初级速成-张勇-专题视频课程

    仿淘宝客户端电商平台android初级速成-969人已学习 课程介绍         本教程从当下火热的商城项目入手,以讲师多年商城项目开发为核心,与北风网强强联手录制了<北风商城>And ...

  8. Android软件开发实例:用客户端写博客

    标题:在Android上通过客户端写博客软件开发实例 作者:肖凤斌 binsweet@gmail.com 关注Android很久了,年初买了G4,但一直没有机会尝试Android上的软件开发. 自己有 ...

  9. 开源android客户端_4个开源Android电子邮件客户端

    开源android客户端 即使年轻一代的成员试图将电子邮件作为"老年人的交流"来掩埋,但现实情况是,电子邮件离死刑不远了. 尽管协作工具 ,社交媒体和短信很重要,但它们还不能替代电 ...

最新文章

  1. [AutoMapper]反射自动注册AutoMapper Profile
  2. FESCAR:阿里重磅开源分布式事务解决方案
  3. SD Price公式(例程,即Formula)
  4. Java中使用JNA实现全局监听Linux键盘事件
  5. SQL从入门到入魔之初入门
  6. RabbitMQ多消费者消息分配
  7. UTM 用户线程模型
  8. php moodle mysql_搭建基于Windows + Apache + PHP + MySQL的Moodle平台
  9. AI智能语音客服机器人系统/方案/案列/技术/项目
  10. Golang8小时基础入门
  11. 2012共享文件服务器,win server2012 r2 服务器共享文件夹设置
  12. 计算机电子电路原理图,学看电路原理图入门知识积累 - 全文
  13. 计算机软件毕业论文周记,毕业论文写作周记范文共12周
  14. moment解读常用操作及语句——subtract、add、calendar
  15. groovy if 判断字符串_Groovy语法
  16. C++字符,字符串,数字,小写,大写的相互转化
  17. 2.Enable ADB integration' to be enabled.
  18. avi格式该怎么转换?高效无损转换avi格式的方法
  19. 关于Caused by: com.alibaba.fastjson.JSONException: syntax error, expect }, actual ,
  20. 线性二次型调节器LQR/LQC算法解析及求解器代码(matlab)

热门文章

  1. OEM、ODM别再混淆了,TCOOP教您轻松辨别
  2. 个股牛市的条件(1)
  3. 华为全栈云如沐春风 AI成点睛之笔
  4. POJ 3744(Scout YYF I )
  5. bzoj1787.紧急集合(倍增LCA)
  6. 方太:以“一”解“套”
  7. 信安软考 第八章 防火墙技术与原理运用
  8. Python正则表达式 .,[],\d,\w,\s,\S,\D,\W的用法
  9. 从零开始的Java笔记01
  10. 面向程序员的数据挖掘指南(四)