Android开发中IntentService的使用(二)

在Android的应用中,往往需要在执行主界面的操作时,如果要执行耗时的操作,那么应该是另外开线程的,或者是用async或者handler,今天发现其实也可以用android中的一个Intentservice去实现。下面例子讲解下。

1 例子中是一个文本框,当用户输入内容后,模拟slepp 10秒,这个时候要是不分离线程,操作的话,用户再点界面,就会死死地停在那里,甚至是出现提示,要强行CLOSE,代码如下:
EditText input = (EditText) findViewById(R.id.txt_input); 

String strInputMsg = input.getText().toString(); 

SystemClock.sleep(30000); // 30 seconds, pretend to do work

TextView result = (TextView) findViewById(R.id.txt_result); 

result.setText(strInputMsg + " " + DateFormat.format("MM/dd/yy h:mmaa", System.currentTimeMillis())); 

 


2 下面是使用IntentService
首先,我们搞一个类SimpleIntentService,继承了IntentService

publicclass SimpleIntentService extends IntentService { 

publicstaticfinal String PARAM_IN_MSG = "imsg"; 

publicstaticfinal String PARAM_OUT_MSG = "omsg"; 

public SimpleIntentService() { 

super("SimpleIntentService"); 

} 

@Override

protectedvoid onHandleIntent(Intent intent) { 

String msg = intent.getStringExtra(PARAM_IN_MSG); 

SystemClock.sleep(3000); // 30 seconds 

String resultTxt = msg + " "

+ DateFormat.format("MM/dd/yy h:mmaa", System.currentTimeMillis()); 

Log.v("SimpleIntentService", "Handling msg: " + resultTxt); 

Intent broadcastIntent = new Intent(); 

broadcastIntent.setAction(ResponseReceiver.ACTION_RESP); 

broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT); 

broadcastIntent.putExtra(PARAM_OUT_MSG, resultTxt); 

sendBroadcast(broadcastIntent); 

} 

 


我们将跟主界面线程分离的操作都写在这里的ononHandleIntent中,这里首先通过
主线程传递的Intent中,获得用户文本框中输入的内容,放到变量msg中,然后
又建立一个Intent,把结果放到这个Intent中去,然后再sendBroadcast(broadcastIntent)广播出去,丢回给主线程。

3 在主线程中,这样启动:

EditText input = (EditText) findViewById(R.id.txt_input); 

String strInputMsg = input.getText().toString(); 

Intent msgIntent = new Intent(this, SimpleIntentService.class); 

msgIntent.putExtra(SimpleIntentService.PARAM_IN_MSG, strInputMsg); 

startService(msgIntent);

 

 


4 同时,在主线程中,也要有一个receive接收

publicclass ResponseReceiver extends BroadcastReceiver { 

publicstaticfinal String ACTION_RESP = "com.mamlambo.intent.action.MESSAGE_PROCESSED"; 

@Override

publicvoid onReceive(Context context, Intent intent) { 

// Update UI, new "message" processed by SimpleIntentService 

TextView result = (TextView) findViewById(R.id.txt_result); 

String text = intent.getStringExtra(SimpleIntentService.PARAM_OUT_MSG); 

result.setText(text); 

} 

} 

 


当然,要注册这个broadcastReceiver,

publicvoid onCreate(Bundle savedInstanceState) { 

super.onCreate(savedInstanceState); 

setContentView(R.layout.main); 

IntentFilter filter = new IntentFilter(ResponseReceiver.ACTION_RESP); 

filter.addCategory(Intent.CATEGORY_DEFAULT); 

receiver = new ResponseReceiver(); 

registerReceiver(receiver, filter); 

} 

 

可以看到,intent service还是比较清晰简单的,但至于性能方面,还是要继续学习,
迟点继续研究下这玩意哦

posted @ 2012-07-14 15:22  water0504  阅读(203)  评论(0编辑  收藏  举报