添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

引用: http://android.tgbus.com/Android/tutorial/201106/356126.shtml

在用Service下载文件时,一个问题就是Service没有界面,如何通知用户当前下载的进度,Service直接向Activity传数据有点麻烦,于是eoe想到了用Broadcast,Service广播,Activity负责接收,再对接收到的数据进行处理,就达到了我们的目的。
先注册Receiver,然后开始Service,上面的TextView和ProgressBar就会随着Service传过来的值变,解除注册Receiver或者结束Service后不会再变。

Service代码:

package com.services;



import android.app.Service;

import android.content.Intent;

import android.os.IBinder;

import android.util.Log;



public class TestService extends Service {

boolean isStop=false;

@Override

public IBinder onBind(Intent intent) {

// TODO Auto-generated method stub

Log.i("TAG","绑定");

return null;

}

public void onCreate(){

Log.i("TAG","Services onCreate");

super.onCreate();

}

public void onStart(Intent intent,int startId){

Log.i("TAG","Services onStart");

super.onStart(intent, startId);

new Thread(){//新建线程,每隔1秒发送一次广播,同时把i放进intent传出

public void run(){

int i=0;

while(!isStop){

Intent intent=new Intent();

intent.putExtra("i", i);

i++;

intent.setAction("android.intent.action.test");//action与接收器相同

sendBroadcast(intent);

Log.i("TAG",String.valueOf(i));

try {

sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}.start();



}

@Override

public void onDestroy() {

Log.i("TAG","Services onDestory");

isStop=true;//即使service销毁线程也不会停止,所以这里通过设置isStop来停止线程

super.onDestroy();

}



}


Activity代码:

package com.services;





import android.app.Activity;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.content.IntentFilter;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.ProgressBar;

import android.widget.TextView;



public class main extends Activity {

/** Called when the activity is first created. */

Button b1,b2,b3,b4;

TestService mService;

ProgressBar pb;

MyReceiver receiver;

TextView tv;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

b1=(Button)findViewById(R.id.b1);

b2=(Button)findViewById(R.id.b2);

b3=(Button)findViewById(R.id.b3);

b4=(Button)findViewById(R.id.b4);

b1.setOnClickListener(l1);

b2.setOnClickListener(l2);

b3.setOnClickListener(l3);

b4.setOnClickListener(l4);

pb=(ProgressBar)findViewById(R.id.pb);

tv=(TextView)findViewById(R.id.tv);

}







public class MyReceiver extends BroadcastReceiver {

//自定义一个广播接收器

@Override

public void onReceive(Context context, Intent intent) {

// TODO Auto-generated method stub

System.out.println("OnReceiver");

Bundle bundle=intent.getExtras();

int a=bundle.getInt("i");

pb.setProgress(a);

tv.setText(String.valueOf(a));

//处理接收到的内容



}

public MyReceiver(){

System.out.println("MyReceiver");

//构造函数,做一些初始化工作,本例中无任何作用

}



}





OnClickListener l1=new OnClickListener(){



@Override

public void onClick(View v) {

// TODO Auto-generated method stub

startService(new Intent(main.this, TestService.class));

//开始服务

}



};

OnClickListener l2=new OnClickListener(){



@Override

public void onClick(View v) {

// TODO Auto-generated method stub

stopService(new Intent(main.this, TestService.class));

//结束服务

}



};

OnClickListener l3=new OnClickListener(){



@Override

public void onClick(View v) {

// TODO Auto-generated method stub

//注册接收器

receiver=new MyReceiver();

IntentFilter filter=new IntentFilter();

filter.addAction("android.intent.action.test");

main.this.registerReceiver(receiver,filter);

}



};

OnClickListener l4=new OnClickListener(){



@Override

public void onClick(View v) {

// TODO Auto-generated method stub

main.this.unregisterReceiver(receiver);

//解除注册接收器

}



};

}

Android:四大组件之 Activity
Activity 是一个用户界面,通过加载一个指定的布局文件来展示各种 UI 元素,同时处理这些 UI 元素的交互事件,如点击、输入文本等。不同的 Activity 之间可以进行跳转,将不同的页面串联起来,共同完成特定的操作流程。每个应用都是由一个或者多个 Activity 组成。
Android 组建-Activity介绍
活动代表了一个具有用户界面的单一屏幕,如 Java 的窗口或者帧。Android 的活动是 ContextThemeWrapper 类的子类。
android:windowIsTranslucent 导致 Activity切换动画无效
android:windowIsTranslucent 导致 Activity切换动画无效
❤️【Android精进之路-04】Android核心组件Activity,必须掌握的知识点(Activity是什么,生命周期是怎样的)❤️
Activity组件是Android的用户接口程序,它充当了Android应用程序与用户的交互入口。
Android快速查看某个Activity的信息
Android中,如果能快速获取某个Activity的名称,我们就不用必须顺着代码逻辑,一步一步的去查找我们想查找的页面了,这就能极大的提高开发速度。
【Android】Android对于Activity的运用以及ViewGroup和 用户界面组件在项目中的运用
【Android】Android对于Activity的运用以及ViewGroup和 用户界面组件在项目中的运用
内存泄露,OOM,ANR ,Devik 进程,Framework原理,Activity 生成一个 view,Android 中的动画,SurfaceView和V
内存泄露,OOM,ANR ,Devik 进程,Framework原理,Activity 生成一个 view,Android 中的动画,SurfaceView和V