Blogtrottr
海芋小站
提供實用軟體教學,介紹有趣網站及資訊,豐富電腦人生
[Android 開發] This message is already in use 解法
Oct 31st 2014, 11:16, by 張海芋
Handler 和 Message 是 Android 用來更新畫面的重要方法,有在開發 Android 的朋友都應該要知道這兩個的用法。而海芋最近使用這個方法來開發程式時,碰到了「android.util.AndroidRuntimeException: This message is already in use」這個問題,這是原本的寫法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
private int MSG_INCREASE_PROGRESSBAR = 9527 ;
private int MSG_Done = 5566 ;
private ProgressDialog m_progressDialog = null ;
private Runnable m_runnable = new Runnable ( ) {
@Override
public void run( )
{
try
{
Message msg = new Message( ) ;
for ( int i = 0 ; i 100 ; i++ )
{
msg.what = MSG_INCREASE_PROGRESSBAR;
m_Handler.sendMessage ( msg) ;
}
msg.what = MSG_Done;
m_Handler.sendMessage ( msg) ;
} catch ( Exception e) {
e.printStackTrace ( ) ;
}
}
} ;
private Handler m_Handler = new Handler( )
{
@Override
public void handleMessage( Message msg)
{
super .handleMessage ( msg) ;
switch ( msg.what )
{
case MSG_INCREASE_PROGRESSBAR:
if ( m_progressDialog != null )
m_progressDialog.incrementProgressBy ( 1 ) ;
break ;
case MSG_DelteDone:
if ( m_progressDialog != null )
{
m_progressDialog.dismiss ( ) ;
m_progressDialog = null ;
}
break ;
}
}
} ;
出現這個問題,海芋就去追查一下 Handler 這個 Class,原來在 Handler SendMessage 後,Handler 會將 Message 加入 MessageQueue 中,造成原本要處理的對象,已經不是原來的對象所致,所以要解決這個問題,必須在每次傳送 Message 給 Handler 前,先 New 一個 Message 元件,所以改成以下的寫法就可以囉!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
private int MSG_INCREASE_PROGRESSBAR = 9527 ;
private int MSG_Done = 5566 ;
private ProgressDialog m_progressDialog = null ;
private Runnable m_runnable = new Runnable ( ) {
@Override
public void run( )
{
try
{
for ( int i = 0 ; i 100 ; i++ )
{
Message msg = new Message( ) ;
msg.what = MSG_INCREASE_PROGRESSBAR;
m_Handler.sendMessage ( msg) ;
}
Message msg = new Message( ) ;
msg.what = MSG_Done;
m_Handler.sendMessage ( msg) ;
} catch ( Exception e) {
e.printStackTrace ( ) ;
}
}
} ;
private Handler m_Handler = new Handler( )
{
@Override
public void handleMessage( Message msg)
{
super .handleMessage ( msg) ;
switch ( msg.what )
{
case MSG_INCREASE_PROGRESSBAR:
if ( m_progressDialog != null )
m_progressDialog.incrementProgressBy ( 1 ) ;
break ;
case MSG_DelteDone:
if ( m_progressDialog != null )
{
m_progressDialog.dismiss ( ) ;
m_progressDialog = null ;
}
break ;
}
}
} ;
如果你喜愛這篇文章, 請考慮
留言回應 或者
訂閱 RSS feed 以獲得更多的文章更新資訊。若有商業上的需求,也歡迎透過
合作提案 與我聯絡。本站文章非經授權請勿「全文轉貼」,引用時請註明來源,謝謝。
This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers.
nbv6d9vomp1hu
線上遊戲排行榜2013/2014,進擊的巨人線上看,candy crush saga外掛,正妹寫真三圍
nbv6d9vomp1hu 發表在 痞客邦 留言 (0) 人氣( )