关于Service中的startService可能bindService的区别

作者:fly 发布于:2014-2-14 21:58 分类:android

服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。这两个方法都可以启动Service,但是它们的使用场合有所不同。使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的特点。
如果打算采用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,但会导致多次调用onStart()方法。采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。
如果打算采用Context.bindService()方法启动服务,在服务未被创建时,系统会先调用服务的 onCreate()方法,接着调用onBind()方法。这个时候调用者和服务绑定在一起,调用者退出了,系统就会先调用服务的onUnbind()方法,接着调用onDestroy()方法。如果调用bindService()方法前服务已经被绑定,多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说onCreate()和onBind()方法并不会被多次调用)。如果调用者希望与正在绑定的服务解除绑定,可以调用 unbindService()方法,调用该方法也会导致系统调用服务的onUnbind()-->onDestroy()方法。

bindService()方法启动时,调用过程:OnCreate()- onBind()
   如果调用bindService()方法前服务已经被绑定,多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说onCreate()和onBind()方法并不会被多次调用)。
   这句话。。。如果多次调用就不会走oncreate()和onBind()了吗??? 应该会调用onBind()吧????
   因为按照Context.startService()方法启动服务,如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,但会导致多次调用onStart()方法。

评论(0) 浏览(2171)

45个android实例源码分享

作者:fly 发布于:2014-2-14 21:51 分类:android

分享45个android实例源码,很好很强大
http://www.apkbus.com/android-20978-1-1.html

andriod闹钟源代码
http://www.apkbus.com/android-20974-1-1.html

android源码分享之指南针程序
http://www.apkbus.com/android-20973-1-1.html

重力感应的测试程序andriod源代码
http://www.apkbus.com/android-20972-1-1.html

android源码分享之时光日志个人日程管理
http://www.apkbus.com/android-20969-1-1.html

OpenGL的一个简单的例子
http://www.apkbus.com/android-20968-1-1.html

文件管理器-android源代码
http://www.apkbus.com/android-20960-1-1.html

Android Txt文本阅读器源码
http://www.apkbus.com/android-20959-1-1.html


Android远程登录含有loading登录效果~~完整代码和超级详细注释
http://www.apkbus.com/android-20958-1-1.html

Android 手电筒源码
http://www.apkbus.com/android-20957-1-1.html

Android操作数据库实例
http://www.apkbus.com/android-20954-1-1.html

android 画图程序
http://www.apkbus.com/android-20953-1-1.html

Android 天气预报加widget源码
http://www.apkbus.com/android-20950-1-1.html

Android 指南针程序
http://www.apkbus.com/android-20949-1-1.html

Android 个人记账程序源码
http://www.apkbus.com/android-20940-1-1.html

Android游戏的心跳效果
http://www.apkbus.com/android-20939-1-1.html

Android PDF 阅读器源码
http://www.apkbus.com/android-20858-1-1.html

Android SqliteManager 源码
http://www.apkbus.com/android-20857-1-1.html

android 多点触控实例源码
http://www.apkbus.com/android-20856-1-1.html

Android 条码扫描程序源码
http://www.apkbus.com/android-20855-1-1.html

EditText插入QQ表情源码
http://www.apkbus.com/android-20854-1-1.html

AsyncTask进度条加载网站数据到ListView
http://www.apkbus.com/android-20834-1-1.html


android连接SQLite数据库-----增加改查+分页
http://www.apkbus.com/android-20833-1-1.html

Android 一个批量删除联系人的Demo
http://www.apkbus.com/android-20832-1-1.html

TXT 文本阅读器源码(android源码分享)
http://www.apkbus.com/android-20827-1-1.html

android 查询工具源代码
http://www.apkbus.com/android-20824-1-1.html


android进度条对话框Demo
http://www.apkbus.com/android-20823-1-1.html

Android实现渐显按钮的左右滑动效果
http://www.apkbus.com/android-20752-1-1.html

android天气预报源码
http://www.apkbus.com/android-20977-1-1.html

Android 文件浏览器源码
http://www.apkbus.com/android-20976-1-1.html

android源码分享之私密通讯录源码
http://www.apkbus.com/android-20975-1-1.html

Android自定义泡泡效果 源码
http://www.apkbus.com/android-20956-1-1.html

android 获取Gps信息的程序源码
http://www.apkbus.com/android-20955-1-1.html

android 超炫的图片浏览器
http://www.apkbus.com/android-20952-1-1.html

android 加载时闪烁点样式的启动画面
http://www.apkbus.com/android-20951-1-1.html

实现基于Android的英文电子词典
http://www.apkbus.com/android-20948-1-1.html

基于 Android 的英文电子词典
http://www.apkbus.com/android-20947-1-1.html

android 源码之英语单词记忆程序源码
http://www.apkbus.com/android-20936-1-1.html

andorid 源码北京公交线路查询(离线)
http://www.apkbus.com/android-20938-1-1.html

Android 计算器源码
http://www.apkbus.com/android-20935-1-1.html

带文字的ProgressBar Demo源码
http://www.apkbus.com/android-20831-1-1.html

android自定义时钟(三种方法实现,秒针效果,详细注解)
http://www.apkbus.com/android-20830-1-1.html

Android 秒表源码分享
http://www.apkbus.com/android-20829-1-1.html

Android源代码定时情景模式切换
http://www.apkbus.com/android-20828-1-1.html

android 公交查询
http://www.apkbus.com/android-20826-1-1.html

android源码分享之带手势划动功能的日历源码
http://www.apkbus.com/android-20825-1-1.html

评论(0) 浏览(2572)

android开发的学习路线

作者:fly 发布于:2014-2-14 21:49 分类:android

第一阶段:Java面向对象编程

1.Java基本数据类型与表达式,分支循环。
2.String和StringBuffer的使用、正则表达式。
3.面向对象的抽象,封装,继承,多态,类与对象,对象初始化和回收;构造函数、this关键字、方法和方法的参数传递过程、static关键字、内部类,Java的垃极回收机制,Javadoc介绍。

阅读全文>>

评论(0) 浏览(1839)

Android在线更新 远程安装程序 .

作者:fly 发布于:2014-2-13 21:47 分类:android

第一步:使用java.net的URLConnection对象来创建连接

第二步:通过InputStream将下载的文件写入存储卡内缓存

第三步:下载完毕之后,通过自定义的openFile()方法打开文件,判断文件类型,若为APK,开始安装

第四步:准备离开Installer程序的同时,通过自制的delFile()方法,删除缓存内文件

阅读全文>>

评论(0) 浏览(2236)

android动态向SPinner控件中添加数据 .

作者:fly 发布于:2014-2-13 8:39 分类:android

public class GroupPurchase extends Activity {   
    private Spinner changeCity;   
    private Button refresh, pre, next;   
    private TextView leftTime, detail, price, citygp;   
    private ImageView images;   
    private ArrayAdapter<String> adapter;   
    private List<String> allItems;   
    private String[] citys = { "北京市", "上海市", "天津市", "福州市" };   
  
    @Override  
    public void onCreate(Bundle savedInstanceState) {   
        super.onCreate(savedInstanceState);   
        setContentView(R.layout.main);   
        initView();   
           
        allItems = new ArrayList<String>();   
        for (int i = 0; i < citys.length; i++) {   
            allItems.add(citys[i]);   
        }   
        adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, allItems);   
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);   
        changeCity.setAdapter(adapter);   
        changeCity.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {   
                    @Override  
                    public void onItemSelected(AdapterView<?> arg0, View arg1,   
                            int arg2, long arg3) {   
                        citygp.setText(changeCity.getSelectedItem().toString() + "今天的团购");   
                        Log.i("info-----------", changeCity.getSelectedItem().toString());   
                    }   
  
                    @Override  
                    public void onNothingSelected(AdapterView<?> arg0) {   
                    }   
                });   
  
        pre.setOnClickListener(new View.OnClickListener() {   
            @Override  
            public void onClick(View v) {   
                Log.i("info-----------", "prefer button has pressed!!!");   
            }   
        });   
  
        next.setOnClickListener(new View.OnClickListener() {   
            @Override  
            public void onClick(View v) {   
                Log.i("info-----------", "next button has pressed!!!");   
            }   
        });   
    }   
  
}  

评论(0) 浏览(7058)

Android中Spinner添加选项

作者:fly 发布于:2014-2-12 23:21 分类:android

main.xml文件内容为:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 
    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:entries="@array/books" />
 
</LinearLayout>

我们在values目录下面新建了一个arrays.xml文件

文件的内容是:

<?xml version="1.0" encoding="utf-8"?>
<resources>
 
    <string-array name="books">
        <item>Rollen</item>
        <item>Rollen Holt</item>
        <item>Rollen ren</item>
    </string-array>
 
</resources>

其余文件都是默认的。

 

评论(0) 浏览(2375)

android.database.CursorIndexOutOfBoundsException:Index -1 requested, with a size of 1

作者:fly 发布于:2014-2-11 15:56 分类:android

android.database.CursorIndexOutOfBoundsException:Index -1 requested, with a size of 1

这个问题折腾了半天又。

阅读全文>>

评论(0) 浏览(2633)

android多线程访问数据库问题.

作者:fly 发布于:2014-2-10 22:17 分类:android

网上查了一些资料。看上去貌似不是很好使的样子,还得自己加锁。自己加锁又不能触发线程调度。还是用hander吧,在一条线程里处理所有的数据库操作。不知这样可否?

评论(0) 浏览(2159)

Android 中Message,MessageQueue,Looper,Handler详解

作者:fly 发布于:2014-2-10 18:10 分类:android

1、MessageQueue:是一种数据结构,见名知义,就是一个消息队列,存放消息的地方。每一个线程最多只可以拥有一个MessageQueue数据结构。
创建一个线程的时候,并不会自动创建其MessageQueue。通常使用一个Looper对象对该线程的MessageQueue进行管理。主线程创建时,会创建一
个默认的Looper对象,而Looper对象的创建,将自动创建一个Message Queue。其他非主线程,不会自动创建Looper,要需要的时候,通过调
用prepare函数来实现。

2、Message:消息对象,Message Queue中的存放的对象。一个Message Queue中包含多个Message。
Message实例对象的取得,通常使用Message类里的静态方法obtain(),该方法有多个重载版本可供选择;它的创建并不一定是直接创建一个新的实例,
而是先从Message Pool(消息池)中看有没有可用的Message实例,存在则直接取出返回这个实例。如果Message Pool中没有可用的Message实例,
则才用给定的参数创建一个Message对象。调用removeMessages()时,将Message从Message Queue中删除,同时放入到Message Pool中。除了上面这
种方式,也可以通过Handler对象的obtainMessage()获取一个Message实例。

3、Looper:
是MessageQueue的管理者。每一个MessageQueue都不能脱离Looper而存在,Looper对象的创建是通过prepare函数来实现的。同时每一个Looper对象
和一个线程关联。通过调用Looper.myLooper()可以获得当前线程的Looper对象
创建一个Looper对象时,会同时创建一个MessageQueue对象。除了主线程有默认的Looper,其他线程默认是没有MessageQueue对象的,所以,不能
接受Message。如需要接受,自己定义一个Looper对象(通过prepare函数),这样该线程就有了自己的Looper对象和MessageQueue数据结构了。
Looper从MessageQueue中取出Message然后,交由Handler的handleMessage进行处理。处理完成后,调用Message.recycle()将其放入Message Pool中。

4、Handler:
消息的处理者,handler负责将需要传递的信息封装成Message,通过调用handler对象的obtainMessage()来实现;
将消息传递给Looper,这是通过handler对象的sendMessage()来实现的。继而由Looper将Message放入MessageQueue中。
当Looper对象看到MessageQueue中含有Message,就将其广播出去。该handler对象收到该消息后,调用相应的handler对象的handleMessage()方法
对其进行处理。

评论(0) 浏览(1881)

android线程间通讯

作者:fly 发布于:2014-2-10 17:21 分类:android

android的编程的确不像windows或者Linux那么方便啊,连ucos都有,信号量互斥锁标志位等常用的线程间同步机制,android愁死我了,

不过 andriod提供了 Handler 和 Looper 来满足线程间的通信。凑活着用吧,毕竟sqllite和android都是轻量型的。

阅读全文>>

评论(0) 浏览(2122)

 
Powered by emlog sitemap