Note: a plugin csak annyi, hogy közvetlenül az IDE-ből lehet indítani a devicet, a new device-ra kattintva pedig már a genymotion alap progit nyitja meg.
Gyorskeresés
Legfrissebb anyagok
- Bemutató Route 66 Chicagotól Los Angelesig 2. rész
- Helyszíni riport Alfa Giulia Q-val a Balaton Park Circiut-en
- Bemutató A használt VGA piac kincsei - Július I
- Bemutató Bakancslista: Route 66 Chicagotól Los Angelesig
- Tudástár AMD Radeon undervolt/overclock
Általános témák
LOGOUT.hu témák
- [Re:] [Luck Dragon:] Asszociációs játék. :)
- [Re:] [gban:] Ingyen kellene, de tegnapra
- [Re:] [D1Rect:] Nagy "hülyétkapokazapróktól" topik
- [Re:] [sziku69:] Szólánc.
- [Re:] Elektromos rásegítésű kerékpárok
- [Re:] PLEX: multimédia az egész lakásban
- [Re:] [MasterDeeJay:] Volta a bányából azaz CMP 100-210 kisteszt (Tesla V100 mining)
- [Re:] [Sub-ZeRo:] Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- [Re:] [antikomcsi:] Való Világ: A piszkos 12 - VV12 - Való Világ 12
- [Re:] [sh4d0w:] Rebel Moon - Ne nézd meg!
Szakmai témák
PROHARDVER! témák
Mobilarena témák
IT café témák
Hozzászólások
WonderCSabo
félisten
fatal`
titán
Igen tudom.
WonderCSabo
félisten
Ezt inkább Antibazsinak szántam, a te hszedet kiegészítve.
[ Szerkesztve ]
Sianis
addikt
Tipp arra, hogy hogyan lehet megkerülni a Crashlytics plugin felrakását? Azért API kulcsot még szeretnék kapni!
Sianis
Karma
félisten
Mondjuk nem rakod fel? Szerintem így nem sok értelme van a kérdésnek...
“All nothings are not equal.”
Sianis
addikt
De a projektbe be kell rakni. De csak azért nem szeretném feltenni a pluginjüket, hogy egyszer egy api kulcsot betoljon a manifestbe.
Sianis
Karma
félisten
Jahogyja. Nem jött át a szándék, hogy integrálni akarnád ezt a cuccot a projektedbe, és ott van ez a telepítési mizéria
Egyébként meg próbáld meg kézzel berakni a metaadatot.
Vagy ez a tool maga generálná ki az API kulcsot? Mert akkor nehezen tudom elképzelni, ki generálná le helyettük
Nem használtam még, TestFlightot illetve saját hibanaplózó cuccot szoktam csak.
[ Szerkesztve ]
“All nothings are not equal.”
Sianis
addikt
Jaja, úgy tűnik, hogy ilyen kis sunyik, hogy csak pluginnel lehet. Saját hibanaplózó? Azt hogy?
Sianis
Karma
félisten
Volt egy szakasz, amikor a BugSense SDK-ja nyílt forráskódú volt, akkor húztam be a forrását, és alakítottam át úgy, hogy az ő rendszerük helyett saját Azure-os backendre küldje a cuccot (eszközadatok, stacktrace főleg), ott meg tárolom és emaileket küldözgetek.
Az androidos oldal lényege egyébként annyi, hogy az Application onCreate-ben meg kell hívni a Thread.setDefaultUncaughtExceptionHandler metódust, ezzel lehet mindent elkapni.
“All nothings are not equal.”
Ablakos
őstag
Az onSaveInstanceState methodus textField állapotmentésben nem értem mi a különbség a két kód között:
outState.putString("TEXT",simpleText.getText().toString());
vagy
outState.putString("TEXT", (String) simpleText.getText());
rgeorge
addikt
A getText() CharSequence-vel tér vissza, ennek leszármazottja a String. Ha pl. éppen String-et ad vissza, mert pl. a setText-et String paraméterrel hívták meg, akkor a második megoldás is helyes, cast-olható String-gé a getText(). Más CharSequence (Spanned stb.) már nem cast-olható String-gé.
Az első megoldás mindig helyes, a toString() mindig String-et ad vissza.
Mondjuk van putCharSequence is, az talán még jobb lenne:
outState.putCharSequence("TEXT",simpleText.getText());
Picard: "What we leave behind is not as important as how we've lived. After all, Number One, we're only mortal." Riker: "Speak for yourself, sir. I plan to live forever."
Ablakos
őstag
Köszönöm, értem.
Karma
félisten
Biztos, hogy jobb lenne, mert a toString() ledarálja a spaneket a szövegről. Mondjuk menteni még sose próbáltam Spannable-t, de a hétköznapi műveleteknél meg megjelenítésnél már szaladtam pofonba.
[ Szerkesztve ]
“All nothings are not equal.”
lac14548
aktív tag
Megnéztem ezt a memento database-t, de nem igazán fogott meg.
Jobb lenne egy kifejezetten arra a célra készült app ami nekem kell.
- Küldd el, kérlek, pontosan milyen mezők kellenek!
A már korábban említett 3 mező kellene:
1. Szám (ez maximum 10 jegyű betű és szám vegyesen, kis és nagybetű.)
2. megnevezés (itt több is lehet egy számhoz tartozóan, de a keresésnek bármelyikre tudni kell keresni)
3. leírás (ez egy hosszabb szöveges leírás)
A keresés tegyen különbséget az ékezetes karakterekben, viszont a nagy és kisbetűk között ne!
- És milyen "végtermék" kellene? Forrás-project eclipse alá? Vagy csak a kész progi?
A végtermék a kész apk kell, hogy legyen, de ha az adatbázis feltöltéséhez/bővítéséhez/javításához kell a programozási felület, akkor úgy is jó.
A továbbiakat szerintem folytassuk privátban, ne terheljük a fórumot.
Kösz,
/Motorola V2288/Siemens C35/Siemens MT50/Nokia 6600/HTC Touch Cruise/ZTE Blade/Samsung Galaxy S+/Xiaomi Redmi 1S/Xiaomi Redmi 2 Pro/Xiaomi Redmi Note 6 Pro/Realme 8 ...
h1ght3chzor
őstag
Semmi, megoldva.
[ Szerkesztve ]
Kérlek tisztelj meg azzal, hogy válaszolsz a privát üzenetre.
pittbaba
aktív tag
Sziasztok!
Szeretném a programomat mindig előtérben tartani. Erre olyan megoldásokat találtam, hogy onPause-nál újra indítani kell az activityt ezért ha valami véletlen le is állítja az appot, akkor így újraindul. Egy handlerrel van megoldva, ami onpause-nál 10 másodperc után újraindítja az appot.
Ez általában működik is, láthatóan home gomb nyomásakor eltűnik majd visszajön stb..
A gond az, hogy reboot után a telefon szintén BootReciever-el indítja az appot, és ha ilyen módon indul el (nem az sdk-ból futtatom) akkor két perc múlva valamilyen ismeretlen folyamat kilövi az appot, és a logok szerint onPause() még lefut, de a benne lévő handler már nem.
Ha nem handlerrel indítom újra akkor végtelenül folyamatosan ugye onpause-onresume felváltva futnak.
Érdekes, hogy onstopig illetve ondestroy-ig nem jut el, valahogy mégis elszáll a handler is.
Ha az sdk-ból futtatom a programot, érdekes módon nem ez történik.
Az autó lockscreent is az app tiltja, ébren tartom a telefont, működik is, viszont mikor a hibajelenség felmerül, és az onPause lefut, akkor valamiért bejön a lockscreen is azonnal.
Van erre valami magyarázat? Ha kell még infó/kód, írjátok!
PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM
thon73
tag
Engem se fogott meg Ezért csináltam sajátot. A program kész, csak átírom a mezőket. Kis türelmet mégis kérek (munkahely, egyebek), de sztem. hétvégén küldöm. Az ékezetekkel nem értek egyet, mert uis. pl. én is ékezet-mentes bill.zetet használok. Egyébként egy kódtábla átírásával gyakorlatilag bármilyen keresési megfeleltetés beállítható, úgyhogy kipróbálhatjuk az ékezetes keresést is. Üdv!
Azért írtam ide, mert úgy gondoltam, ide küldöm - hátha más is érdeklődik.
[ Szerkesztve ]
thon73
tag
Lehet, h. hülyeség, amit gondolok, de a "kilövés" az egész Application process-t érinti. A handler azon belül van, - elvileg - az is megszűnik. Arra kellene rájönni, hogy miért lő ki a rendszer egy előtérben lévő Applicationt? B lehetőség: Ha esetleg nem az application process indítaná a handler-t? Pl. service - bár ezzel nincs tapasztalatom.
pittbaba
aktív tag
Szerintem is ez lehet a gond, és gondoltam a service-re is, csak már annyira ágyúval verébre módszernek érzem...
Nincs ötlet esetleg hogy deríthetném ki mi lövi ki az appot? És érdekes h csak reboot után történik.
PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM
Karma
félisten
Egy dolog hogy ágyúval verébrének tűnik, de ha egyszer ez a rendeltetésszerű használata az Androidnak, nem pedig szembemenni a UI életciklussal, szerintem nem kéne kategorikusan elvetned.
Nem nagy cucc egyébként egy Service osztályt írni, én is meglepődtem az első után, visszatekintve a félelmeimre.
[ Szerkesztve ]
“All nothings are not equal.”
pittbaba
aktív tag
Igen, este gondolkoztam rajta es ez a hivatalos jo megoldás, csak nem értem hogy lehet az h onpause után nem jon onstop ondestroy, a feladatkezeloben ott az app, megis minden timer, handler működés leáll. Nem en megyek szembe az activity ciklussal hanem az oprendszer.
PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM
fatal`
titán
Eleve szembemész az android működésével avval, hogy a home gombra visszahozod előtérbe az appod
Karma
félisten
Támadt egy ötletem ez alapján: mi lenne, ha az app UI része egy custom launcher lenne, és az lenne az alapértelmezett a telefonon?
“All nothings are not equal.”
pittbaba
aktív tag
Hunfatal: Ez tök jogos igen...
Karma: Igen, akik erre kerestek választ, volt hogy ezt találták végső megoldásnak. A baj ha fejlesztés végén vagyok már, és most ezért átszervezni az egészet.. hát nem tudom... főleg hogy már minden működni látszik, és most ilyen idiótaságot kell debuggolni...
A service egyébként tényleg nem volt egy nagy ügy, már szépen működik is. Azt nem értem, hogy ha feladatkezelőben kilövöm az appomat akkor a service miért áll le, hisz pont az lenne a dolga hogy ne tegye ezt?
Nem a memória ürítése részt használom, hanem feladatkezelő, s az appomat kiválasztva befejezés. A service-ben lévő handler ami időről időre csekkolja a háttérben h fut e az alkalmazás is elhal. Miért?
Telefonos kapunyitót akarok készíteni IOIO van a telefonra kötve, egy éve szórakozok vele, hogy stabil legyen, de lassan feladom, mert egyszerűen mindig kijön valami hiba amivel nem tudok mit kezdeni.
Fut egy webserver app is a telefonon az csinálja a legtöbb gondot, mert egyszerűen egyik WS appot sem képesek megcsinálni úgy hogy a háttérben automatikusan elinduljanak a szolgáltatások
Sajnos az USB kezelés is vicc, 5-ből 2x kapaszkodik össze a IOIO-val és csak rebootokkal lehet orvosolni ha nem sikerül, ezért szeretnék írni egy önjavító funkciót, ha leszakad a IOIO akkor addig rebootol amíg össze nem csatlakozik. Na itt van a gond, reboot után a WS programon belül gombbal kell indítani a lighttpd-t meg a mysql-t (nem tudom mi értelme ennek így de az összes appan így van). Adjatok már tanácsot, mindig kapok itt 1-2 jó tippet amivel tovább tudok haladni, hátha most is lesz valami okosság...
Ti a webserver részt hogy oldanátok meg?
PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM
WonderCSabo
félisten
Nem ertem mit szeretnel? Egy webszervert telefonon futtatni? Az Android komponenseinek eletciklusa teljesen korrekt, logikus es alaposan felepitett. Olvasd el reszletesen.
[ Szerkesztve ]
pittbaba
aktív tag
Vannak letölthető appok amik csomagban adnak webservert php modullal illetve mysql servert, és phpmyadmint. Ilyeneket próbáltam, volt amit meg is vettem, de mindegyiknél az a baj, hogy a server indítása gombnyomáshoz kötött, ami meg esetleg beállítható h bootkor startolja a servert az is néha bugos, nem indul a server automatikusan telefon reboot után, de a webservert kezelő app fut.
Ilyenkor az én appom ezt érzékeli és újraindítja a webservert kezelő appot, de az továbbra sem mindig indítja el magát a webservert. Ezért olyan megoldás kellene, hogy lenyúlok magáig a webserver programig és azt indítom.
A webserver azért kell, hogy le tudja kérni a programom hogy az adott bejövő hívás telefonszáma benne van e az adatbázisban, mert csak akkor nyit az ajtó. Azért nem sima appon belüli adatbázist használok, mert valahogy távolról tudnom kell adminisztrálni, ezért json -al adom át az adatot a mysqlből az appnak.
Mivel szeretném hogy minden éjszaka legyen egy automatikus reboot, ezért fontos hogy megoldjam reboot után minden felálljon rendben, ha pedig nem akkor próbálja javítani.
Remélem sikerült normálisan leírnom.
A ciklusokat értem, sokat tanulmányoztam, rengeteget teszteltem már, de még mindig hajlamos vagyok bekavarodni.
PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM
eastsider
nagyúr
Sziasztok!
valaki foglalkozott már AR drone alkalmazás feljesztéssel android alatt?
van külön SDK-ja.
Sianis
addikt
Mókás dolog lehet.
Én még nem.
Sianis
Karma
félisten
Azért erre egy LAMP stacket bedobni a telefonra hogy távolról konfigurálható legyen igencsak overkill... Olyan baltával faragott vaskarika, fából.
Ha a telefon úgyis internetre lát folyamatosan, én kidobnám az egészet a kukába, és leraknék egy webservice-t valahol ami megmondja egy telefonszámról hogy valid-e vagy sem. Ingyen futtathatsz ilyet Azure-ban (Mobile Service-szel még kódolnod se kell), OpenShiften, Herokun, Google App Engine-en, és még ki tudja hány másik helyen.
Az életben tartáshoz egyébként használhatod az AlarmManagert is, periodikusan ráhívva a service-edre, így az Android biztosan beindítja, ha nem futna. Szerintem megérné.
[ Szerkesztve ]
“All nothings are not equal.”
pittbaba
aktív tag
Úgy indult, de mivel a lényeg pont az, hogy nem biztos h mindig neten tud lenni, a wifi instabil, viszont nyitnia mindig kell, ezért lett a választás a localhost, na meg a sebesség miatt is. Szóval ha elfelejtek előfizetni internetre, akkor sincs kimaradás, ha lefüstöl a router akkor sem. Naponta több mint 100 alkalommal van belépés, így fontos lenne hogy offline is működjön.
Most próbálom megoldani okosba, több időt kap a webserver reboot után, így eléggé összekapja magát és most mint ha ez a része jól menne (még sok tesztelés vár rá)
Sajnos a IOIO miatt előtérben kell tartani az appot, most átgondoltam az alapján amiket mondtatok, és sikerült kicsit barátságosabban megoldani a futás ellenőrzést.
A service dolog bevált, onPause-nál meg egy változót átbillentek igazra így a service-nek meg tudom mondani, hogy éppen fut e a program, vagy csak háttérben van, és ehhez képest előtérbe hozom, vagy elindítom. Még nem hibátlan mindig, de már egy szebb megoldás. Köszönöm a mai tanácsokat
PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM
Karma
félisten
Persze most már mindegy, de olyat is lehetett volna csinálni, hogy a cloud service-ből az app frissítés idején lehúzza a teljes táblát, és egyébként offline reszel.
“All nothings are not equal.”
thon73
tag
Bocsánat, ha nagyon alapot kérdezek:
Az android forráskódban mindig synchronized( mLock ) kifejezés szerepel. Miért nem a védett tartalomra (mondjuk egy array-listre) szinkronizál, miért kell egy külön objektumot erre létrehoznia? (Azt értem, hogy ez miként működik, csak azt nem, hogy ez így miért jobb?)
Én ugyanis eddig mindig a védett tartalmat írtam be.
A másik hasonló kérdésem: ha ugyanazt a file-t külön szálakon is írom, de minden szál külön nyitja meg (tehát nem közös leírót használnak), akkor ugye nem kell a szálakkal és a szinkronizálással törődnöm, a rendszer sorba rakja a kiírt adatokat? (Mindig csak egy sornyi append van, tehát a program oldaláról nem feltétlenül kellene külön lock-olnom a file-t)
Gyakorlatilag működik a program, csak azt nem tudom bizonyítani, hogy elvileg is mindig működőképes lesz. Köszönöm!
Karma
félisten
1) Bevett gyakorlat, hogy a lockhoz használt objektum egy mindentől független, kívülről nem látható, de belül se cserélhető (azaz final) tagváltozó legyen. Ezzel biztosítható, hogy csak ez az egy osztályod lockolhasson az általa védett dolgai körü
l, külső kód véletlenül sem; és hogy nem cserélheted ki másik példányra egy mellényúlással. Vesd össze, ha mondjuk egy ArrayListre lockolsz és van egy gettered a listához, más is rálockolhat és bedeadlockolhatod a programot. Vagy adatok újratöltése után új ArrayListet hozol létre.
Más jelentősége tudtommal nincs.
2) Akkor eddig szerencséd volt, hogy az írás és a fájlhandle lezárása gyorsabban lement, minthogy ütközzenek... [link]
[ Szerkesztve ]
“All nothings are not equal.”
thon73
tag
Aha! Köszönöm. 1. pont alapján a kódot javítottam.
2. Eddig multithreadet (a rendszer által kínált lehetőségeken kívül) csak időzítési feladatokra használtam. Viszont - a log szigorításával - szükségem lett volna egy "saját" log-ra, amit akkor is használhatok, ha tableten dolgozom. A program nagyon egyszerű, egy file-ba írja az üzeneteket. ((Az esetleges összeomlás miatt a metódus nyitja-írja-zárja a file-t (flush is lehetne helyette, de az idő nem volt lényeges szempont)). Ilyen üzenet bármelyik thread-ről érkezhet, ezért szeretnénk biztos lenni abban, hogy működik.
Két megoldást találtam a figyelmeztetésed után:
private final Object lock = new Object();
private static String addTextToFileLog( File logFile, String text )
{
synchronized( lock )
{
OutputStreamWriter logStream = new OutputStreamWriter( new FileOutputStream(logFile, true));
logStream.append( text );
logStream.flush();
logStream.close();
}
}
illetve:
private static synchronized String addTextToFileLog( File logFile, String text )
{
OutputStreamWriter logStream = new OutputStreamWriter( new FileOutputStream(logFile, true) );
logStream.append( text );
logStream.flush();
logStream.close();
}
(A hibaellenőrzést az egyszerűség kedvéért töröltem.)
Van előnye egyik vagy másik megközelítésnek? Egyáltalán jó ez így, vagy valamit elnéztem?
Ha még abban tudnék egy kis segítséget kapni, hogy ezt hogyan tesztelhetem a szimpla próbálkozáson kívül, azt is megköszönném!
[ Szerkesztve ]
Karma
félisten
Az első verzió biztosan nem fog működni, mert a lock objektum példányváltozó, míg a metódusod statikus. A lockot "static final"-ként deklarálva ellenben működhet.
Egyébként a két megoldás között a különbség pont az, amit kifejtettem korábban: ha a synchronized kulcsszót használod a metódus szignatúrájában, akkor vagy a this (példánymetódus esetén), vagy a class objektum (statikus esetben) lesz a lock. Mindkettő elérhető kívülről, így +1 deadlock faktor.
[ Szerkesztve ]
“All nothings are not equal.”
Benex
senior tag
Sziasztok!
A computerschookl-ba járok Debrecenbe és szoftverfejlesztőnek tanulok. Nyári gyakorlatot keresek , ami android szoftverfejlesztéssel kapcsolatos.(Mivel iskola elvégzése után is ezzel szeretnék foglalkozni) Sajnos eddig nem találtam magamnak egy helyet sem , ahova tudnék jelentkezni , mivel nincs "hallgatói jogviszonyom".3 éve fogllakozok androiddal, így minden téren ( pl. romolgatás( virtuálisan ubuntu os-on rom forgatás ), kernelek cseréje , és android alkalmazások írása ( egyenlőre alapszinten )). Ha tudnátok nekem segíteni , lehetőségeket mondani, hogy hova próbáljak jelentkezni, nagyon megköszönném.
Ismert programozói nyelvek: Java(alap),C++( 1 éve tanulom,középszinten vagy még jobban is megy ), HTML ( 5 ),CSS,SQL.
Alapszinten beszélek angolul és Németből most tervezek nyelvvizsgát középszinten(április-május körül, és ezután 1-1,5 éven belül angolból is szeretnék ).
Előre is köszönöm szépen a segítségeteket, nagyon fontos lenne ez nekem
Üdv: Benex
[ Szerkesztve ]
Proud owner of S21Ultra and Watch 4
Sianis
addikt
Adott egy screen, lényegtelen mennyi minden van rajta. x mp tétlenség, tehát nem ér semmihez, semmilyen módon, fel akarok dobni egy kis tippet. Utána ezt elrejteni y idő után, vagy érintés után.
Van erre valami jó kis módszer? Az a bajom, hogy mindennek nem adhatok onTouchListener-t, hiszen van neki sajátja, meg ezért egy Button-ból nem csinálnék külön sajátot.
Minden ötletet szívesen látok.
Köszi!
Sianis
thon73
tag
Vicces, most derült ki mennyire topa vagyok a multithread-del, mégis megosztom egy volt ötletem. Én scrolloztatni akartam a képet, amíg a delikvens hosszan nyom egy pontot. A longpress nem jó, mert az csak egy dolgot csinál meg utána, aztán megint vár. Sztem. neked ugyanez kell fordítva: Ha érintés történik, akkor megszakítod a thread-et.
Egy két kódrészlet:
TouchThread touchThread;
@Override
public boolean onTouchEvent(MotionEvent event)
{
...
case MotionEvent.ACTION_DOWN:
touchDirection = 1;
touchThread = new TouchThread();
touchThread.start();
break;
case MotionEvent.ACTION_UP:
if (touchThread != null)
touchThread.interrupt();
break;
}
...
}
private class TouchThread extends Thread
{
@Override
public void run()
{
// Csak vár, hogy hosszú nyomás legyen
for (int cnt=0; cnt<3; cnt++)
{
sleep(100);
if (isInterrupted())
{
touchThread = null;
return;
}
}
// Innentől történik a gyorsuló görgetés
int pause = 150;
while(true)
{
for (int cnt=0; cnt<15; cnt++)
{
sleep(pause);
if (isInterrupted())
{
touchThread = null;
return;
}
// Itt kérjük meg a görgetést az UI száltól !!!!!!
touchThreadHandler.sendEmptyMessage(0);
}
if (pause > 85)
pause -= 30;
}
}
// A görgetést a Handler fogja elvégezni
private Handler touchThreadHandler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
if (touchDirection >= 0)
rollForwardLine();
else
rollBackwardLine();
touchState = 0;
invalidate();
}
}
}
Ezt elég régen írtam, aztán megszakadt a dolog. Egyébként nem csak az időzítést tudja, hanem egyre gyorsul is a görgetés, amíg nyomod a képet.
Bocs, hogy a kód összetöredezett, amíg kiszemezgettem, de sztem a lényeg érthető. Mint kiderült, nem vagyok (még) teljesen otthon a thread-ekben; (ha valaki hibát talál, és szól, köszönöm); de a kód prímán működik.
[ Szerkesztve ]
Sianis
addikt
Kicsit egyszerűbre vettem a figurát. Raktam az egész elé egy View-t, ami invisible. Ennek lett egy OnTouchListenere, ami mindig false-t ad vissza, így nem avatkozik bele az alatta lévő bármilyen elem működésébe, ugyanakkor leállítja a postDelayed-del megadott Runnable-t ami megjelenítené a tutorialt. Miután megjelenik a tutorial, elindul ugyanígy egy másik Runnable, ami pedig amint lejár eltűnteti a tutorialt és törli a láthatatlan view-t is így végképp kikerül a zavarási eshetőségek közül.
Sianis
thon73
tag
Bocs, farkas hiba! Nem is lehet pédányváltozó, mert az egész osztály nem példányosított.
Szóval a private static final Object lock lenne a jobbik megoldás. Köszönöm! Tanulok, csak lassan.
thon73
tag
Egyszerűbb, célszerűbb.
Nekem emlékeim szerint egy fejvakarásom volt, az UI műveleteket először nem a Handlerbe tettem, ami tilos. Vagyis nem az UI szálon dolgozni velük.
Sianis
addikt
Amúgy. Otto. Tudja azt, hogy létrehozol egy olyan bus-t, ami main szálon fut mindenképpen. És akkor nincs ilyen probléma, meg handlerbe sem kell postolgatni mindig. Meg tud még egy pár dolgot helyetted.
Sianis
Karma
félisten
Ezzel az egyszerűsített formával már nagyon közel kerültél az általam ismert legtisztább megoldáshoz (szálakat indítani igazi borzalom volt), viszont még mindig eggyel több felesleges holtjáték van benne: ez a láthatatlan View felesleges, ugyanis az Activitynek van egy onUserInteraction metódusa, ami akkor hívódik meg, ha a felhasználó piszkálja az appot.
Ezt használhatod a Handler takarításához.
[ Szerkesztve ]
“All nothings are not equal.”
thon73
tag
Még egy utolsó kérdést hadd tegyek fel:
A file írás nem mindig történik meg a záráskor sem (Ezt RandomAccessFile esetén tapasztaltam, még a program bezárása után is hozzányúlt, igaz, csak a metaadatokhoz).
Nem biztonságosabb a FileLock használata az esetemben? Vagy ugyanazt az eredményt érem el, mint a synchronized védelemmel?
Sianis
addikt
Bakker! Elrakom ezt az infót, ki is fogom próbálni.
Sianis
Karma
félisten
Ez a kérdés alapján Androidon a FileLock pont az ellen nem véd, amit te csinálsz a fájllal, azaz egy processzen belül két szál között nem csinál semmit...
Szerintem egyébként a teljes elképzelés rossz, a fájlt egyetlen objektumnak szabadna csak írnia, és akkor nem kellene lockolgatni semmit. Például egy háttérszál, akinek van egy BlockingQueue-ja, amibe mindenki más belerakhatja a kiírandó szövegeket, ő meg bedarálja ha van mit, a többi időt meg altatásban tölti.
“All nothings are not equal.”
thon73
tag
Aha. Ezt nem olvastam, csak a doksit. Akkor tényleg nem véletlenül írják, hogy Android alatt ez nem használható.
Megnéztem a "hivatalos" Log-ot is, de az teljesen használhatatlan (nekem), mert alacsony szintű hívással az op-rendszer logját írja, amit viszont én nem tudok kiolvasni. (Ill. csak PC kapcsolatban, meg rootolt készüléken)
Még nem tudok teljes mélységben válaszolni, de próbálkoztam, olvasgattam, és érdekes eredményeket kaptam.
1. A külön file-író thread azért is nagyon jó ötlet, mert akkor ez nem is lassítja pl. az UI thread-et. Az elkészítéstől egy kicsit megriadtam, de nekiláttam. ITT találtam egy hasonló elgondolást, ebből annyi látszik, hogy ez nem lesz olyan egyszerű.
2. A Channel thread-safe egy programon belül. Hm. ezt nem tudtam, pedig a doksi is egyértelműen ezt írja.
3. ITT azt az okosságot írják, hogy Channelen kívül NEM lehet többször (tehát több threadból) írásra megnyitni egy file-t. (Ez szerintem nem igaz, én írtam file-t egyszerre több nyitott úton keresztül, igaz egy thread-en.)
4. Ez a legérdekesebb: leteszteltem. Csináltam több párhuzamos thread-et, mindegyik ugyanazt csinálja: megnyitja/írja/bezárja ugyanazt a file-t, mégpedig OutputStreamWriter(FileOutputStream) úton. (Igaz, ez pufferelt, de a puffer többszörösét írtam ki, kb 2 Mbyteot, 4 threadról.)
Nem létezik, hogy soha ne ütközzenek. Mégis, az összes kiírás tökéletes! Tettem elé time-stamp-et, sokszor egyforma, mégsincs hiba!!
Vagyis: Minden elmélet ellenére gyakorlatilag lehet egyszerre több threadról írni ugyanazt a file-t. Most akkor ez hogyan lehet? Mégis "thread-safe" lenne az alacsony szintű írás androidon?? Lehet, h. itt működik, más java környezetben meg nem??
WonderCSabo
félisten
Én is az onUserInteraction-t akartam írni, de látom Karma megelőzött. Az Otto tényleg veszett jó cucc én is csak ajánlani tudom.
kemkriszt98
aktív tag
Sziasztok, nem tudom hogy ez off-e (nem tudom hogy kódból érdemes megoldani vagy valami beállítással )
Az a lényeg ennek az intentnek a kezelésére(?) a legalkalmasabbnak a skypeot találja az android nekem meg az alapértelmezett telefon alkalmazás kellene:
Intent i = new Intent(Intent.ACTION_CALL,Uri.parse("tel:" + number));
"Tigris, tigris, csóvafény éjszakáknak erdején, mily kéz adta teneked szörnyü és szép termeted?" -William Blake-
(#1750) kemkriszt98 válasza kemkriszt98 (#1749) üzenetére
kemkriszt98
aktív tag
Bocs, megint elfelejtettem a barátom : Google
"Tigris, tigris, csóvafény éjszakáknak erdején, mily kéz adta teneked szörnyü és szép termeted?" -William Blake-
Mai Hardverapró hirdetések
prémium kategóriában
- LG NanoCell 55NANO766QA Halvány píxel csík
- Philips 58PUS8545/12 1 ÉV GARANCIA Játék üzemmód
- Tyű-ha! HP EliteBook 850 G7 Fémházas Szuper Strapabíró Laptop 15,6" -65% i7-10610U 32/512 FHD HUN
- Bomba ár! HP EliteBook 840 G5 - i5-8G I 8GB I 128GB SSD I 14" FHD I HDMI I Cam I W10 I Gari!
- The Last of Us Part I Ps5