2012-09-05 61 views
1

我有一個擴展AsyncTask來發送以太網消息的類。當創建,並打電話給我的MainActivity內正常工作:如何獲取對調用方法的Activity的引用?

new SendCommandTask(MainActivity.this).execute(ipAddress, portNum, message); 

不過,我想在一個新的類,而不是一個方法中嵌入這個...

public class NewClass{ 

    String ipAddress; 
    String portNum; 
    String command; 

    public NewClass(String ip, String pn, String, c){ 
     ipAddress = ip; 
     portNum = pn; 
     command = c; 
    } 
    public send(){ 
     SendCommandTask(MainActivity.this).execute(ipAddress, portNum, command); 
    } 
} 

...然後調用方法是直接從我的MainActivity:

NewClass newClass = new NewClass;  
NewClass.send(); 

我試圖傳遞活動在構造另一個參數,但是當我做了該方法pukes。有沒有另一種方法來引用我的NewClass中的調用Activity?或者我堅持從MainActivity運行AsyncTask? (我希望這是有道理的,我對Java和OO編程一般都很陌生。)非常感謝任何幫助!

+0

我同意Sparky你應該考慮IntentService。否則,當你說'但方法pukes'時,請張貼你所指的錯誤。 – newbyca

+0

另外,這裏有更多關於活動和異步任務如何交互的信息:http://stackoverflow.com/questions/12117031/what-happens-to-an-asynctask-when-the-launching-activity-is-stopped-銷燬-wh – newbyca

回答

1

請參閱幾天前我寫的this answer。我認爲它也適用於此。主要的額外考慮因素是,你的AsyncTask需要能夠超過它的通話活動嗎?如果Activity有可能關閉或重新啓動,可以在onStop()中終止任務,或者小心不要使用任何共享字段。

如果您的AsyncTask將直接讀取任何成員,這些成員是您傳入的活動的一部分,那麼您最好將其保留在活動中。將任務分解爲獨立類是最好的,當你希望它是獨立的並且能夠使用多個活動類時。

此外,請考慮在服務而不是活動中完成您的工作。我是IntentService的忠實粉絲。

+0

是的,它絕對聽起來像你應該使用IntentService。 – newbyca

+0

我的應用程序中只有一個Activity(現在,無論如何),所以它肯定會超過AsyncTask,它的壽命很短。它只是通過IP發送一個字符串,然後結束。聽起來我最好是在活動代碼中留下呼叫。我一定會探索切換到一個服務,但目前我的頭腦有點過分。一次一件:)謝謝你的幫助! – Holyschnitt

0

您可以嘗試將前一個Activity作爲上下文傳遞給您的新類的構造函數。

public NewClass(Context mainActivity, String ip, String pn, String, c)

它可能工作,但它似乎有點哈克。

+0

SendCommandTask需要MainActivity類型的參數,所以我仍然需要創建一個新的MainActivity對象來使用。我將如何重新將Context與MainActivity對象關聯?不過,你是對的。無論哪種方式,這似乎是一個不雅的解決方案。 – Holyschnitt

+0

你會將它作爲MainActivity投入使用,它應該可以工作。 –

相關問題