2014-04-01 16 views
3

我正在寫一個AIR Native Extension,必須在新的Android線程上做一些工作。我必須使用Context來獲取此線程中的設備信息。我在一個新的線程中調用了FREContext的getActivity方法,該線程出現了段錯誤。無法在新線程中從FREContext調用getActivity()?

在我FREContext擴展類,我有:

public class MyExtensionContext extends FREContext {  
    public void doThreadWork() { 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       // calling com.adobe.fre.FREContext.getActivity(), crashes here 
       Activity act = getActivity(); 
      } 
     } 
    } 
} 

根據Adobe的文檔,FREObjects不準那個正在運行的FREFunction線程之外進行訪問。 FREContext和新線程是否有類似的情況?

回答

2

好吧,事實證明我不能直接從FREContext調用getActivity()。我通過我的FREFunction進行設置:

public class MyFunction implements FREFunction { 

    @Override 
    public FREObject call(FREContext context, FREObject[] passedArgs) {  
     MyExtensionContext mec = (MyExtensionContext) context; 
     // Set a local variable in MyExtensionContext to getActivity value 
     mec.act = mec.getActivity(); 
     mec.doThreadWork(); 
     return null; 
    } 
} 

我的FREContext現在看起來是這樣的:

public class MyExtensionContext extends FREContext {  
    public Activity act;   

    public void doThreadWork() { 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       // Do stuff with Activity "act" here 
      } 
     } 
    } 
} 

我不完全知道爲什麼這個工程,因爲它看起來像是一個獲得一個額外的步驟相同的getActivity()值,但可能是因爲此活動在與FREContext不同的時間創建。

+0

它理論上應該通過調用** oFREContext.getActivity()**來工作。但有時它會崩潰。我不知道爲什麼。 –

相關問題