Service作为android的四大组件之一,那是肯定要学的,其实感觉Service也不是很复杂onCreate()--->onStart()--->onDestroy().不过感觉特别要注意的就是除了onStart()以外,其他方法就只是在Service创建的的时候调用。从我的代码中就可以看出。
MainActivity.java
package game.gameintent;
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.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView text;
private Button bn;
RandBroadReceiver rbr;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text=(TextView)findViewById(R.id.text);
bn=(Button)findViewById(R.id.bn);
rbr=new RandBroadReceiver();
IntentFilter intentfilter=new IntentFilter();
intentfilter.addAction("game.gameintent.service");
registerReceiver(rbr, intentfilter);
bn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO 自动生成的方法存根
Intent intent=new Intent(MainActivity.this, MyService.class);
MainActivity.this.startService(intent);
System.out.println("fn");
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
class RandBroadReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// TODO 自动生成的方法存根
Bundle data=intent.getExtras();
int random=data.getInt("random");
System.out.println("receive random="+random);
String strRandom=random+"";
text.setText(strRandom);
}
}
}
MyService.java
</pre><pre class="java" name="code">package game.gameintent;
import java.util.Random;
import android.app.Service;
import android.content.Intent;
import android.os.Bundle;
import android.os.IBinder;
public class MyService extends Service {
int random=0;
public void onCreate(){
MyService myService=new MyService();
// RandThread rt=new RandThread();
// rt.start();
System.out.println("onCreate");
super.onCreate();
}
public void onStart(Intent intent,int startId){
RandThread rt=new RandThread();
rt.start();
super.onStart(intent, startId);
}
@Override
public IBinder onBind(Intent arg0) {
// TODO 自动生成的方法存根
return null;
}
class RandThread extends Thread{
public void run(){
try {
random=new Random().nextInt(10);
Thread.sleep(1000);
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
System.out.println("randomThread");
System.out.println("random="+random);
Intent intent=new Intent();
intent.setAction("game.gameintent.service");
Bundle data=new Bundle();
data.putInt("random", random);
intent.putExtras(data);
sendBroadcast(intent);
}
}
}
1.刚开始是把子线程放在了onCreate()中的,结果就可以产生一个随机数,
2.后来把子线程放在了onStart()中,就可以每点一次按钮,就产生一个随机数
3.还要注意:就是text.setText()只可传递String类型,不可传递int类型